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

Xorgon picture Xorgon · Oct 10, 2015 · Viewed 27.9k times · Source

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?

Answer

Orest Hera picture Orest Hera · Oct 10, 2015

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)