Surmonter la duplication des paramètres de bouton dans les boucles For de Tkinter
Dans Tkinter, la création de boutons via une boucle for peut introduire un comportement inattendu si l'affectation appropriée des paramètres est pas mis en œuvre. Considérez l'extrait de code suivant :
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
Le résultat attendu est que chaque bouton reçoive son propre paramètre unique du dictionnaire de l'utilisateur. Cependant, en appuyant sur n'importe quel bouton, seule la dernière valeur du dictionnaire (par exemple "Test2") est imprimée.
Ce problème se pose car les expressions lambda utilisent la même variable de nom tout au long de la boucle. Chaque itération écrase la valeur précédente, laissant le lambda avec le dernier nom attribué dans la boucle.
Solution : paramètres de mot clé par défaut dans Lambda
Pour résoudre ce problème, vous pouvez utilisez les paramètres de mots-clés par défaut dans votre expression lambda. Voici le code corrigé :
for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
En liant explicitement la valeur actuelle de la variable name à l'argument du mot-clé name du lambda, le lambda conserve le paramètre correct pour chaque bouton. Chaque pression sur un bouton déclenche désormais la sortie de paramètre unique souhaitée.
Cette technique garantit efficacement que chaque bouton conserve l'affectation de paramètre prévue dans la boucle for.
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!