Sha*_*hay 26 python lambda loops tkinter button
我正在尝试创建一些按钮(带有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
Run Code Online (Sandbox Code Playgroud)
并且每个按钮都有自己的参数(Test getting Test和Test2得到Test2)但是当我按下按钮时它们都打印"Test2",这意味着它们使用相同的功能和相同的参数.
我怎么解决这个问题?
msh*_*ldt 38
问题是你在for循环中的lamba.您的lambda正在使用name
变量,但name
每次通过for循环都会重新分配变量.所以最后,所有按钮都获得name
了for循环中分配的最后一个值.为避免这种情况,您可以在lamba表达式中使用默认关键字参数,如下所示:
user_button = Tkinter.Button(self.root,
text=name,
command=lambda name=name: self.a(name))
Run Code Online (Sandbox Code Playgroud)
这会在每次循环时将name
变量的当前值绑定到lamba的name
关键字参数,从而产生所需的效果.
归档时间: |
|
查看次数: |
11080 次 |
最近记录: |