Maison >développement back-end >Tutoriel Python >Comment éviter les problèmes de connexion de signal en boucle dans PyQt4 ?
Connexion des emplacements et des signaux dans PyQt4 : résolution du problème de connexion de signal en boucle
Lorsque vous essayez de connecter des signaux dans PyQt4 dans une boucle, il est courant pour rencontrer un comportement inattendu tel que tous les boutons imprimant la même valeur. Ce problème provient de la manière dont fonctionnent la portée, la recherche de nom et les fermetures en Python.
Dans le code fourni, la fonction lambda utilisée pour connecter les boutons n'a pas sa propre liaison pour la variable i, mais recherche plutôt sa valeur dans l'espace de noms de la méthode __init__. Par conséquent, je suppose toujours la dernière valeur définie dans la boucle, qui dans ce cas est 9.
Pour résoudre ce problème, Python propose plusieurs solutions, notamment :
Arguments de mots clés avec valeur par défaut Valeur :
En passant i comme argument de mot-clé avec une valeur par défaut, vous créez une nouvelle liaison dans le lambda function:
self._numberButtons[i].clicked.connect(lambda checked, i=i: self._number(i))
functools.partial:
Cela fournit une approche plus concise et lisible en encapsulant l'appel de fonction avec les arguments souhaités :
self._numberButtons[i].clicked.connect(partial(self._number, i))
L'utilisation de ces techniques garantit une liaison appropriée au sein de la fonction de rappel de chaque bouton, permettant à chaque bouton d'afficher sa valeur correspondante lorsqu'il est cliqué.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!