Tkinter分配按钮命令与lambda循环

我试图创建几个按钮(与一个)像这样:

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 

并为每个按钮获取自己的参数(测试获得测试和Test2得到Test2),但是当我按下按钮,他们都打印“测试2”,这意味着他们正在使用相同的参数相同的功能。

我该如何解决这个问题?

问题在于for循环中的lamba。 你的lambda正在使用name变量,但是每次通过for循环都会重新分配name变量。 所以最后,所有的按钮都会得到在for循环中分配的最后一个值。 为了避免这种情况,你可以在你的lamba表达式中使用默认的关键字参数,例如

 user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name)) 

这将每次通过循环将name变量的当前值绑定到lamba的name关键字参数,从而产生所需的效果。