Maison > développement back-end > Tutoriel Python > Comment puis-je transmettre des arguments uniques à plusieurs boutons Tkinter créés dans une boucle ?

Comment puis-je transmettre des arguments uniques à plusieurs boutons Tkinter créés dans une boucle ?

Mary-Kate Olsen
Libérer: 2024-12-26 22:06:18
original
683 Les gens l'ont consulté

How Can I Pass Unique Arguments to Multiple Tkinter Buttons Created in a Loop?

Comprendre la création de boutons dans Tkinter avec des arguments de commande

Dans Tkinter, créer plusieurs boutons dans une boucle peut être utile pour générer des interfaces utilisateur dynamiques. Cependant, transmettre des arguments de commande aux boutons peut présenter des défis, en particulier lorsque vous essayez de distinguer quel bouton a été enfoncé.

Considérez le code suivant, où les boutons sont créés avec leurs titres incrémentés par le compteur de boucles :

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)
Copier après la connexion

Le problème survient lorsque nous essayons d'imprimer l'identifiant du bouton (myNum) en cliquant sur l'un d'entre eux. La sortie affiche systématiquement 2, la valeur de la dernière itération. Ce comportement indique que les boutons sont essentiellement impossibles à distinguer malgré leurs titres uniques.

Résoudre le problème

Pour résoudre ce problème, nous devons nous assurer que chaque bouton capture sa propre valeur distincte de i au niveau moment de la création. Pour y parvenir, nous pouvons utiliser une technique intelligente avec les fonctions lambda :

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda i=i: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)
Copier après la connexion

En ajoutant l'affectation i=i dans la fonction lambda, nous "gelons" effectivement la valeur actuelle de i au moment où le lambda est défini. Cela garantit que chaque bouton conserve son identifiant unique même une fois la boucle terminée.

Conclusion

Cette technique nous permet de créer dynamiquement plusieurs boutons Tkinter dans une boucle, où chaque bouton peut être identifié de manière unique lorsque cliqué. En comprenant le comportement des fonctions et des fermetures lambda, nous pouvons obtenir plus de contrôle et de flexibilité dans nos applications Tkinter.

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