méthode QMetaObject.connectSlotsByName.
Le listing suivant vous en donne un exemple.
Note > Le code est disponible dans le projet connexion-par-decorateur .
# main_window_biblio.py
# avec connexion signal-slot par décorateur
…
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtCore import QMetaObject, pyqtSlot
class MainWindowBiblio(QMainWindow):
def __init__(self):
… # voir listing plus haut
self.pushButtonOK.setObjectName("pushButtonOK")
QMetaObject.connectSlotsByName(self)
@pyqtSlot()
def on_pushButtonOK_clicked(self):
QMessageBox.information(self,"Info",
"Titre : "+self.lineEditTitre.text())
On peut vérifier à l'exécution qu'on obtient le même comportement que précédemment.
Quelques détails sur pyqtSlot
Le décorateur pyqtSlot est une fonction assez élaborée qui comporte plusieurs
arguments optionnels. Ces arguments, omis dans l'exemple ci-dessus, permettent de
contrôler finement les connexions signaux-slots. L'utilisation la plus importante de
ces arguments consiste à spécifier les types des arguments du signal à connecter.
Ceci est nécessaire notamment pour lever l'ambiguïté quand le même nom de signal
a plusieurs signatures possibles, ce qui arrive parfois dans la bibliothèque C++ Qt.
Par exemple, la classe QSpinBox propose deux signaux homonymes :
// Extrait de la classe QSpinBox de Qt ...
// Ceci est du C++ !
void valueChanged(int i);
void valueChanged(const QString &text);
Ceci signifie que deux signaux sont émis lorsque la valeur de la QSpinBox change :
75
Précédent

- 76/494

Suivant