Maison > développement back-end > Tutoriel Python > Comment éviter de réaffecter les commandes des boutons dans les boucles Tkinter For à l'aide des fonctions Lambda ?

Comment éviter de réaffecter les commandes des boutons dans les boucles Tkinter For à l'aide des fonctions Lambda ?

Linda Hamilton
Libérer: 2024-12-15 05:57:17
original
663 Les gens l'ont consulté

How to Avoid Reassigning Button Commands in Tkinter For Loops Using Lambda Functions?

Attribuer des commandes de bouton dans une boucle Tkinter For à l'aide de Lambda

Lors de la création de boutons dans une boucle Tkinter For à l'aide de fonctions lambda, il est crucial d'éviter réaffecter la même variable dans la boucle. Cela garantit que chaque bouton reçoit un paramètre unique.

Le problème :

Dans le code fourni :

def a(self, name):
    print(name)

users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"}
row = 1
for name in users:
    user_button = Tkinter.Button(self.root, text=name,
                                 command=lambda: self.a(name))
    user_button.grid(row=row, column=0)
    row += 1
Copier après la connexion

La fonction lambda dans le La boucle for fait référence à la variable du même nom, qui est réaffectée à chaque itération. En conséquence, tous les boutons invoquent la même fonction avec la dernière valeur attribuée au nom, ce qui entraîne un comportement incorrect.

La solution :

Pour résoudre ce problème, vous peut lier la valeur actuelle de la variable name à l'argument de mot-clé du lambda en utilisant les paramètres par défaut :

user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))
Copier après la connexion

Par les arguments de mot-clé par défaut, la fonction lambda de chaque bouton a sa propre copie unique de la variable de nom, garantissant que le paramètre correct est utilisé lorsque le bouton 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