PySide : Comment obtenir cliqué objet QPushButton dans le QPushButton cliqué logement?
Je suis nouveau sur PySide. Je veux obtenir le QPushButton obj (comme l'utiliser pour obtenir son texte) dans son cliqué logement.
button = QtGui.QPushButton("start go")
button.clicked.connect(self.buttonClick)
def buttonClick(self):
... # How can I get the button object?
# print button.text() how to get the text : 'start go' ?
Merci!
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai fait pour résoudre le problème:
sender()
. Peut être difficile à utiliserlambda
comme cela lors de la connexion beaucoup de boutons dans une boucle, si.lambda
crée une fonction anonyme, plus d'infos ici secnetix.de/olli/Python/lambda_functions.hawkVous pouvez simplement utiliser
auto.sender()
pour déterminer l'objet qui a lancé le signal.Dans votre code quelque chose le long des lignes de ce qui devrait travailler.
print self.sender().text()
Habituellement, la plupart des widgets sera créé dans le code de configuration de la fenêtre principale. Il est toujours une bonne idée d'ajouter ces widget en tant qu'attributs de la fenêtre principale, de sorte qu'ils puissent être accessibles facilement plus tard:
Si vous avez beaucoup de boutons qui utilisent tous le même gestionnaire, vous pouvez ajouter des boutons à une QButtonGroup, et de connecter le gestionnaire de son buttoncliked signal. Ce signal peut envoyer cliqué sur le bouton, ou un identifiant que vous spécifiez vous-même.
Il y a aussi la possibilité d'utiliser
self.sender()
pour obtenir une référence à l'objet qui a envoyé le signal. Cependant, il est parfois considéré comme une mauvaise pratique, car elle sape la raison principale de l'utilisation des signaux en premier lieu (voir des avertissements dans les docs pour l'expéditeur pour plus de détails).En fait, je voulais commenter un commentaire en réponse #1, mais n'ont pas assez de réputation pour le faire encore :). Le commentaire est "Peut être difficile à utiliser lambda comme cela lors de la connexion beaucoup de boutons dans une boucle, si." Et c'est exactement ce que je devais faire quand j'ai trouvé cette page.
Faire cela dans une boucle ne fonctionne pas:
Votre rappel sera toujours appelée avec le dernier bouton de button_list (pourquoi voir plus d'informations sur cette page, j'ai également trouvé - https://blog.mister-muffin.de/2011/08/14/python-for-loop-scope-and-nested-functions)
Faire ceci au lieu de cela, il fonctionne: