Comment passer des arguments aux fonctions en cliquant sur le bouton dans PyQt?
Je veux passer des arguments à une fonction, quand je clique sur le bouton. Que dois-je ajouter à cette ligne button.connect(button, QtCore.SIGNAL('clicked()'), calluser(name))
donc il va passer la valeur de la fonction:
def calluser(name):
print name
def Qbutton():
button = QtGui.QPushButton("button",widget)
name = "user"
button.setGeometry(100,100, 60, 35)
button.connect(button, QtCore.SIGNAL('clicked()'), calluser(name))
Une chose de plus, les boutons seront générés à l'aide de for
boucle; de sorte name
valeur varie. Je tiens donc à attacher chaque nom avec le bouton. J'ai fait la même chose dans Pytk en utilisant for
boucle et l'appel à l'argument de la fonction de base lorsque l'utilisateur clique dessus.
source d'informationauteur uahmed
Vous devez vous connecter pour publier un commentaire.
Généralement les Interfaces graphiques sont construits à l'aide de classes. En utilisant les méthodes liées comme les rappels (voir
self.calluser
ci-dessous), vous pouvez "passer" de l'information à la fonction de rappel parself
'attributs (par exemple,self.name
):Par exemple, en utilisant un peu modifié le code de ce tutoriel:
Depuis le rappel de soi est toujours appelé sans arguments supplémentaires, lorsque vous devez passer distincts des informations supplémentaires à de nombreux rappels, vous avez besoin de faire différents rappels pour chaque bouton.
Car cela peut être laborieux (manuellement), l'utilisation d'une fonction de l'usine à la place. Voir ci-dessous pour un exemple. La fonction factory est une fermeture. Il peut être passé des arguments supplémentaires, dont la fonction interne peut accéder quand on l'appelle:
J'ai essayé une façon efficace de le faire et il a bien fonctionné pour moi. Vous pouvez utiliser le code:
Voici une autre manière. --- PARTIELLE -- je la trouve plus simple:
trouvée sur:
http://tech-artists.org/forum/showthread.php?3118-PyQt-Maya-How-to-pass-arguments-to-a-function-when-connecting-it-to-PyQt-button
Le code ci-dessous illustre une méthode pour associer des données générés boutons. Par exemple, vous pouvez modifier l'instruction
self.keydata[b] = key
pour stocker un tuple de données dansself.keydata[b]
pour une utilisation lors du traitement d'un événement bouton plus tard.Remarque, dans le code suivant,
assets
est déjà défini dans le dictionnaire contenant les titres pour les boutons. Dans leprocessButton(self)
routine,self.sender()
est égale à une entrée dans la variable de classebuttons[]
.Sortie était comme le suivant, où les quatre premières lignes imprimées au cours de la
for
boucle, et les quatre derniers imprimé lorsque les quatre boutons sont pressés dans l'ordre.En Python, les instances de classe sont disponibles. Vous pouvez simplement utiliser une instance d'une classe comme une fonction. Cette classe peut contenir ce que vous voulez. (Dans certaines langues ou cadres, un objet appelable est appelé un foncteur ou un objet de fonction.)