l'un avec un nombre, l'autre avec une chaîne de caractères. Techniquement, on
appelle cela la surcharge des fonctions ; elle est permise en C++ mais n'est pas
possible en Python. Dès lors, pour connecter l'un des deux signaux de façon
univoque, on indique la signature voulue comme argument de pyqtSlot, en utilisant
les types Python. Par exemple, pour une QSpinBox nommée spinBoxChoix, on
aura :
@pyqtSlot(int)
def on_spinBoxChoix_valueChanged(self,i):
print ("nombre entier : %d" % i)
Dans cet exemple, i sera la valeur entière transportée par le premier signal. Si l'on
veut aussi traiter le second signal, on ne peut plus utiliser la nomenclature
habituelle, car Python écraserait silencieusement la première méthode par la
seconde du même nom. Pour pallier ce problème, pyqtSlot propose l'argument
name pour associer explicitement les noms de méthodes.
@pyqtSlot(int,name='on_spinBoxChoix_valueChanged')
def on_spinBoxChoix_valueChanged_int(self,i):
print ("nombre entier : %d" % i)
@pyqtSlot(str,name='on_spinboxChoix_valueChanged')
def on_spinBoxChoix_valueChanged_str(self,msg):
print ("chaîne de caractères : '%s'" % msg)
Note > Dans l'exemple qui précède, on a ajouté un suffixe aux noms de méthodes
Python pour bien les distinguer. C'est juste un choix : rien n'impose de suivre une
quelconque convention, car l'association est explicite par l'argument name.
Pour plus de détails sur la fonction pyqtSlot, vous pouvez consulter la page de
référence PyQt5.
4.3. Comparaison des deux approches de
connexion
Quelle est l'utilité de cette seconde approche (décorateur pyqtSlot) par rapport à la
première, qui paraît plus simple ? En fait, nous verrons bientôt qu'en utilisant l'outil
Qt Designer, on pourra générer automatiquement les instructions que nous avons écrites
dans MainWindowBiblio.__init__, y compris les formalités administratives comme
les appels à setObjectName. Dans ce cas, le programmeur n'aura donc plus qu'à
76
appelle cela la surcharge des fonctions ; elle est permise en C++ mais n'est pas
possible en Python. Dès lors, pour connecter l'un des deux signaux de façon
univoque, on indique la signature voulue comme argument de pyqtSlot, en utilisant
les types Python. Par exemple, pour une QSpinBox nommée spinBoxChoix, on
aura :
@pyqtSlot(int)
def on_spinBoxChoix_valueChanged(self,i):
print ("nombre entier : %d" % i)
Dans cet exemple, i sera la valeur entière transportée par le premier signal. Si l'on
veut aussi traiter le second signal, on ne peut plus utiliser la nomenclature
habituelle, car Python écraserait silencieusement la première méthode par la
seconde du même nom. Pour pallier ce problème, pyqtSlot propose l'argument
name pour associer explicitement les noms de méthodes.
@pyqtSlot(int,name='on_spinBoxChoix_valueChanged')
def on_spinBoxChoix_valueChanged_int(self,i):
print ("nombre entier : %d" % i)
@pyqtSlot(str,name='on_spinboxChoix_valueChanged')
def on_spinBoxChoix_valueChanged_str(self,msg):
print ("chaîne de caractères : '%s'" % msg)
Note > Dans l'exemple qui précède, on a ajouté un suffixe aux noms de méthodes
Python pour bien les distinguer. C'est juste un choix : rien n'impose de suivre une
quelconque convention, car l'association est explicite par l'argument name.
Pour plus de détails sur la fonction pyqtSlot, vous pouvez consulter la page de
référence PyQt5.
4.3. Comparaison des deux approches de
connexion
Quelle est l'utilité de cette seconde approche (décorateur pyqtSlot) par rapport à la
première, qui paraît plus simple ? En fait, nous verrons bientôt qu'en utilisant l'outil
Qt Designer, on pourra générer automatiquement les instructions que nous avons écrites
dans MainWindowBiblio.__init__, y compris les formalités administratives comme
les appels à setObjectName. Dans ce cas, le programmeur n'aura donc plus qu'à
76
