Maison > développement back-end > Tutoriel Python > Comment puis-je transmettre correctement les variables de boucle aux commandes des boutons Tkinter ?

Comment puis-je transmettre correctement les variables de boucle aux commandes des boutons Tkinter ?

Linda Hamilton
Libérer: 2024-12-24 17:56:10
original
168 Les gens l'ont consulté

How Can I Pass Loop Variables Correctly to Tkinter Button Commands?

Passer des variables de boucle aux commandes de boutons Tkinter

Dans Tkinter, créer des boutons dans une boucle peut être simple. Cependant, transmettre des arguments spécifiques à la commande de chaque bouton peut devenir délicat.

Considérez le scénario suivant dans lequel vous tentez de créer trois boutons avec les titres « Jeu 1 » à « Jeu 3 ». Vous avez l'intention de transmettre la valeur numérique correspondante à l'argument de la commande afin que lorsqu'un bouton est enfoncé, vous puissiez identifier quel bouton a déclenché l'action.

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

Malheureusement, ce code ne fonctionne pas comme prévu. Lorsqu'un bouton est enfoncé, la valeur imprimée est toujours 2, la dernière itération de la boucle. Le problème se pose car la fonction lambda utilise la valeur de i à la fin de la boucle, et non sa valeur à la création de chaque bouton.

Le Miracle de Fermeture

Pour résoudre ce problème, vous besoin de créer une fermeture autour de la commande de chaque bouton. Ceci peut être réalisé en utilisant la syntaxe lambda i=i : self.open_this(i).

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

Avec cette modification, la commande de chaque bouton capture la valeur spécifique de i au moment de sa création. Lorsqu'un bouton est enfoncé, la fermeture garantit que la valeur correcte de i est transmise à la fonction open_this.

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