
PyQt5 - Widgets, signaux et slots | page 2
1. Le principe signal / slot
Signal : un evenement emis par un widget (clic, texte modifie, valeur changee...).
Slot : une fonction Python qui s'execute quand le signal est emis.
connect : la ligne qui relie le signal au slot.
widget . signal . connect ( slot )
| | |
le widget l'evenement la fonction a executer (SANS parentheses)
Exemple : self.pushBtnOK.clicked.connect(self.onPushBtnOKClicked)
Ou placer le code ?
class Biblio(Ui_MainWindow, QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self) # 1) cree les widgets
# 2) les connexions : TOUJOURS dans __init__, APRES setupUi
self.pushBtnOK.clicked.connect(self.onPushBtnOKClicked)
# 3) le slot : une methode de la classe
def onPushBtnOKClicked(self):
print("clic !")
2. Les 3 facons de connecter
A) Slot simple (sans parametre)
self.pushBtnOK.clicked.connect(self.onOK)
def onOK(self):
print("OK")
B) Slot qui recoit la valeur envoyee par le signal
self.spinBox.valueChanged.connect(self.onValeur)
def onValeur(self, valeur): # 'valeur' = la nouvelle valeur du spinBox
print(valeur)
C) Slot avec un argument a vous (lambda)
self.pushBtn1.clicked.connect(lambda: self.afficher("Bouton 1"))
self.pushBtn2.clicked.connect(lambda: self.afficher("Bouton 2"))
def afficher(self, texte):
QMessageBox.information(self, "Info", texte)
Astuce : un meme slot pour plusieurs boutons
self.pushBtn1.clicked.connect(self.onBoutonClique)
self.pushBtn2.clicked.connect(self.onBoutonClique)
def onBoutonClique(self):
bouton = self.sender() # le bouton qui a ete clique
print(bouton.objectName(), bouton.text())