Python Slots Example
last modified July 16, 2020
In this part of the PyQt5 programming tutorial, we explore events and signalsoccurring in applications.
Events in PyQt5
Nov 15, 2016 Python slots Example. Andy November 15, 2016 Light code theme. Usage of Python slots special attribute. 1 Prevent dynamic instance attributes. When a button is clicked, for example, it emits a “clicked ” signal. Signals do nothing alone, but once connected to a slot, the code in the slot will be executed whenever the signal is emitted. In the Python programs, every function is a slot. It is possible to connect one signal to multiple slots, and to connect slots consecutively.

GUI applications are event-driven. Events are generated mainly by theuser of an application. But they can be generated by other means as well; e.g. anInternet connection, a window manager, or a timer.When we call the application's exec_()
method, the application entersthe main loop. The main loop fetches events and sends them to the objects.
In the event model, there are three participants:
- event source
- event object
- event target
Nov 09, 2018 slots is an attribute you can add to a Python class when defining it. You define slots with the possible attributes that an instance of an object can possess. Here’s how you use slots: For instances of this class, you can use self.x and self.y in the same ways as a normal class instance. This is a tutorial in Python3, but this chapter of our course is available in a version for Python 2.x as well: Slots, Avoiding Dynamically Created Attributes in Python 2.x Classroom Training Courses Due to the corona pandemic, we are currently running all courses online. Python老鸟都应该看过那篇非常有吸引力的 Saving 9 GB of RAM with Python’s slots 文章,作者使用了slots让内存占用从25.5GB降到了16.2GB。在当时来说,这相当于用一个非常简单的方式就降低了30%的内存.
The event source is the object whose state changes. It generates events.The event object (event) encapsulates the state changes in the event source.The event target is the object that wants to be notified. Event source objectdelegates the task of handling an event to the event target.
PyQt5 has a unique signal and slot mechanism to deal with events.Signals and slots are used for communication between objects. A signalis emitted when a particular event occurs. A slot can be any Python callable.A slot is called when its connected signal is emitted.
PyQt5 signals and slots

This is a simple example demonstrating signals and slots in PyQt5.

In our example, we display a QtGui.QLCDNumber
and a QtGui.QSlider
. We change the lcd
number by dragging the slider knob.
Here we connect a valueChanged
signal of the slider to thedisplay
slot of the lcd
number.
The sender is an object that sends a signal. The receiveris the object that receives the signal. The slot is the method thatreacts to the signal.
PyQt5 reimplementing event handler
Events in PyQt5 are processed often by reimplementing event handlers.
In our example, we reimplement the keyPressEvent()
event handler.
If we click the Escape button, the application terminates.
Event object in PyQt5
Event object is a Python object that contains a number of attributesdescribing the event. Event object is specific to the generated eventtype.
Python Slots Example Definition
In this example, we display the x and ycoordinates of a mouse pointer in a label widget.
The x and y coordinates are displayd in a QLabel
widget.
Mouse tracking is disabled by default, so the widget only receives mouse moveevents when at least one mouse button is pressed while the mouse is being moved.If mouse tracking is enabled, the widget receives mouse move events evenif no buttons are pressed.

The e
is the event object; it contains data about the eventthat was triggered; in our case, a mouse move event. With the x()
and y()
methods we determine the x and y coordinates ofthe mouse pointer. We build the string and set it to the label widget.
PyQt5 event sender
Sometimes it is convenient to know which widget is the sender of a signal.For this, PyQt5 has the sender
method.

We have two buttons in our example. In the buttonClicked
methodwe determine which button we have clicked by calling thesender()
method.
Both buttons are connected to the same slot.
We determine the signal source by calling the sender()
method.In the statusbar of the application, we show the labelof the button being pressed.
PyQt5 emitting signals
Objects created from a QObject
can emit signals.The following example shows how we to emit custom signals.
Python Class __slots__ Example
We create a new signal called closeApp
. This signal isemitted during a mouse press event. The signal is connected to theclose()
slot of the QMainWindow
.
A signal is created with the pyqtSignal()
as a class attributeof the external Communicate
class.
The custom closeApp
signal is connected to the close()
slot of the QMainWindow
.
Python Slots Example
When we click on the window with a mouse pointer, the closeApp
signalis emitted. The application terminates.
Python Qt Slot Example
In this part of the PyQt5 tutorial, we have covered signals and slots.