我正在尝试创建一些按钮(带有for),如下所示:
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
并且每个按钮都有自己的参数(Test得到Test和Test2得到Test2),但是当我按下按钮时,它们都打印“ Test2”,这意味着它们使用具有相同参数的相同功能。
我该如何解决?
问题是你的lamba在for循环中。你的lambda正在使用该name变量,但是name每次通过for循环都会重新分配该变量。因此,最后,所有按钮都将获得name在for循环中分配的最后一个值。为了避免这种情况,你可以在lamba表达式中使用默认的关键字参数,如下所示:
user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
每次循环时,name它将变量的当前值绑定到lamba的name关键字参数,从而产生所需的效果。