PyQt Signals/Slots Tutorial 🎯

beginner
11 min

PyQt Signals/Slots Tutorial 🎯

Welcome to the PyQt Signals and Slots tutorial! In this lesson, we'll explore how to handle events and communication between objects in PyQt, a powerful Python library for creating GUI applications. Let's dive in!

Understanding Signals and Slots 📝

In PyQt, Signals and Slots are fundamental concepts for handling events and communication between different objects.

  1. Signals: These are emitted by an object when a specific event occurs. Signals are essentially functions that can be called automatically when their condition is met.

  2. Slots: These are functions that are connected to signals. When a signal is emitted, the corresponding slot function is called.

Let's see a simple example to better understand Signals and Slots.

Example: A Simple Calculator 💡

In this example, we'll create a basic calculator application with two buttons for addition and subtraction, and a text box to display the result.

python
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout from PyQt5.QtCore import Qt, pyqtSignal class Calculator(QWidget): result_updated = pyqtSignal(str) # Declare a signal for updating the result def __init__(self): super().__init__() self.result = QLineEdit() # Create a line edit for displaying the result self.add_button = QPushButton('Add') # Create an add button self.sub_button = QPushButton('Subtract') # Create a subtract button self.layout = QVBoxLayout() # Create a vertical layout self.layout.addWidget(self.result) # Add line edit to the layout self.layout.addWidget(self.add_button) # Add add button to the layout self.layout.addWidget(self.sub_button) # Add subtract button to the layout self.setLayout(self.layout) # Set the layout for the calculator widget # Connect add button's clicked signal to a slot function self.add_button.clicked.connect(self.add) # Connect subtract button's clicked signal to a slot function self.sub_button.clicked.connect(self.subtract) def add(self): # Get the current value of the line edit current_result = self.result.text() # Split the current result into operands operands = current_result.split('+') try: # Add the operands and update the result self.result.setText(str(float(operands[0]) + float(operands[1]))) # Emit the result_updated signal with the new result self.result_updated.emit(self.result.text()) except ValueError: # Handle the case when the input is not a valid number self.result.setText('Invalid Input') def subtract(self): # Implement the subtraction functionality here # ... # Connect the result_updated signal's new result to a slot function result_updated.connect(self.result.setText) app = QApplication([]) calculator = Calculator() calculator.show() app.exec_()

In this example, we created a Calculator class that inherits from QWidget. We defined a result_updated signal, which is emitted when the result is updated. We also created an add and subtract functions that handle the addition and subtraction operations, respectively.

We connected the clicked signals of the add_button and sub_button to their respective slot functions using the connect method. Additionally, we connected the result_updated signal to a slot function that updates the text of the line edit.

Quiz 📝

Quick Quiz
Question 1 of 1

Which PyQt concept is used to handle events and communication between objects?

Wrapping Up ✅

In this lesson, we've learned about Signals and Slots in PyQt, and how they help manage events and communication between objects. We also created a simple calculator application to demonstrate their usage.

In the next lesson, we'll dive deeper into more advanced topics related to PyQt Signals and Slots. Stay tuned!

Happy coding! 👩‍💻👨‍💻