Tkinter attribuer la touche de commande en boucle avec lambda
Je suis en train de créer un peu de boutons (un pour un) comme suit:
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
et pour les boutons pour obtenir leur propre paramètre (Test se Test et Test2 arriver Test2) mais quand j'appuie sur les boutons ils sont tous deux d'impression "Test2", ce qui signifie qu'ils sont en utilisant la même fonction avec le même paramètre.
Comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est votre lamba dans la boucle for. Votre lambda est à l'aide de la
name
variable, mais laname
variable est réaffecté à chaque fois grâce à la boucle for. Donc en fin de compte, tous les boutons obtenir la dernière valeur quiname
a été attribué dans la boucle for. Pour éviter cela, vous pouvez utiliser les paramètres par défaut paramètres de mot clé dans votre lamba expression comme:Cette lie de la valeur actuelle de la
name
variable pour le lamba estname
argument mot-clé à chaque fois dans la boucle, la production de l'effet désiré.