Maison > développement back-end > Tutoriel Python > Comment éviter les problèmes de connexion de signal en boucle dans PyQt4 ?

Comment éviter les problèmes de connexion de signal en boucle dans PyQt4 ?

Linda Hamilton
Libérer: 2024-11-13 16:52:02
original
504 Les gens l'ont consulté

How to Avoid Looped Signal Connection Issues in 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))
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal