Signaux et Slots¶
Slots : Récepteurs ou Mécanismes d’événements.
1. Qu’est-ce qu’un signal et un slot ?¶
- Signal : Événement déclenché par l’utilisateur ou le système (ex: clic sur un bouton).
- Slot : Fonction appelée en réponse à un signal.
- Traduction française :
- Signal → “Événement” ou “Signal” (terme technique accepté).
- Slot → “Récepteur”, “Méthode de traitement” ou “Fonction de rappel”.
2. Exemple : Bouton qui modifie un texte aléatoire¶
signal1.py
import sys
import random
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QPushButton,
QLabel,
QVBoxLayout,
QWidget
)
from PySide6.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Générateur de nombres")
self.label = QLabel("Appuyez sur le bouton !", alignment=Qt.AlignmentFlag.AlignCenter)
self.button = QPushButton("Générer un nombre")
self.button.clicked.connect(self.update_label)
# Création d'un conteneur central avec layout
central_widget = QWidget()
self.setCentralWidget(central_widget) # Définir le widget central
# Configuration du layout vertical
layout = QVBoxLayout(central_widget)
layout.addWidget(self.label) # Ajoute le label en haut
layout.addWidget(self.button) # Ajoute le bouton en dessous
def update_label(self):
random_number = random.randint(0, 100)
self.label.setText(f"Nombre généré : {random_number}")
app = QApplication(sys.argv)
window = MainWindow()
window.resize(300, 200) # Taille de la fenêtre
window.show()
sys.exit(app.exec())
3. Explication du code¶
self.button.clicked.connect(self.update_label):- Le signal
clickeddu bouton est connecté au slotupdate_label.
- Le signal
QVBoxLayout:- Organise les widgets verticalement (label en haut, bouton en dessous).
QWidgetcomme conteneur central :central_widgetsert de support pour le layout.setCentralWidget(central_widget)définit ce widget comme contenu principal.
- Ajout des widgets au layout :
layout.addWidget(self.label)layout.addWidget(self.button)
def update_label(self)::- Slot personnalisé qui génère un nombre aléatoire et met à jour le texte du label.
self.label.setText(...):- Modifie dynamiquement le contenu du
QLabel.
- Modifie dynamiquement le contenu du
Pourquoi utiliser un layout ?
Gestion automatique du redimensionnement :
- Les widgets s’adaptent si la fenêtre est agrandie.
- Code plus lisible
- Pas besoin de gérer manuellement les positions (move()).
4. Points clés¶
- Les signaux/slots permettent une programmation événementielle (réactive).
- Un même signal peut être connecté à plusieurs slots (ex: un bouton qui déclenche deux actions).
Exercice pratique¶
Modifiez l’exemple pour :
- Ajouter un deuxième bouton qui incrémente un compteur.
- Afficher le compteur dans un nouveau
QLabel.