Search code examples
pythonqtpyqt4callableslots

"TypeError: native Qt signal is not callable" with custom slots


The Environment

I am running an Anaconda environment with Python 3.4. I am using PyCharm as my IDE.

The Objective

I am trying to make a pyQt4 QPushButton connect to a custom function:

button.clicked().connect([method reference or whatever])

Attempts

I have tried using the pyqtSlot() decorator but when I run the code it throws:

NameError: name 'pyqtSlot' is not defined

I have used the following imports which should include that decorator:

from PyQt4 import QtCore, QtGui

I also attempted to change my method into its own callable class containing a call method.

The general error message that I'm getting for various attempts is this:

TypeError: native Qt signal is not callable

The Question

Honestly, at this point I have pretty much no idea where to go with this or what details you may need to diagnose the problem. Could anyone give me an idea how to put this together?


Solution

  • pyqtSlot() should be imported from PyQt4.QtCore:

    from PyQt4.QtCore import pyqtSlot
    

    it can be also used as @QtCore.pyqtSlot() since you already import QtCore.

    You have the error message TypeError: native Qt signal is not callable since the slot clicked should be connected without parentheses:

    button.clicked.connect([method reference or whatever])
    

    You can start from simple examples that you can find in PyQt4 package, for example examples/widgets/tetrix.py:

        startButton = QtGui.QPushButton("&Start")
        startButton.clicked.connect(self.board.start)