Python Pyqt Signals Slot Rating: 6,2/10 6117 votes
I was to lazy to take a look at the
- Each PyQt widget, which is derived from QObject class, is designed to emit ‘ signal ’ in response to one or more events. The signal on its own does not perform any action. Instead, it is ‘connected’ to a ‘ slot ’. The slot can be any callable Python function.
- This video introduces signals and slots so that we can now respond to events. It also wraps up our window in a class. Here is the code for the tutorial: http.
- The Signal class provides a way to declare and connect Qt signals in a pythonic way. PySide adopt PyQt’s new signal and slot syntax as-is. The PySide implementation is functionally compatible with the PyQt 4.5 one, with the exceptions listed bellow.
new-style signal and slot support which was introduced in PyQt 4.5 until yesterday. I did know that there were something called
new-style signals and slots but that was the end of the story. Now I have taken the time and I think it's a cleaner solution than the
old-style.
QtCore.SIGNAL and QtCore.SLOT macros allow Python to interface with Qt signal and slot delivery mechanisms. This is the old way of using signals and slots. The example below uses the well known clicked signal from a QPushButton. The connect method has a non python-friendly syntax.
I'll just give you a short intro to whet your appetite, find all details here yourself.
This is the old way of connecting a signal to a slot. To use the
new-stylePython Pyqt Signal Slot
support just replace line 11 with following code
The
new-style support introduces an attribute with the same name as the signal, in this case
clicked.
If you need to define your own signal you'll do something like this (off the top of my head):
And the old way:
IMHO the
Python Pyqt Signals Slot Machine
new-style support is more pythonic and you don't have to specify your signals as strings when connecting. If you use pydev (eclipse) you'll also have completion support for signals.