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
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))
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!