为了账号安全,请及时绑定邮箱和手机立即绑定

Tkinter用lambda在循环中分配按钮命令

Tkinter用lambda在循环中分配按钮命令

斯蒂芬大帝 2019-06-18 17:18:24
Tkinter用lambda在循环中分配按钮命令我正在尝试创建几个按钮(带有一个for),如下所示:def a(self, name):     print name users = {"Test":"127.0.0.0", "Test2":"128.0.0.0"}row = 1for 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和Test 2获取Test 2),但是当我按下按钮时,它们都会打印“test 2”,这意味着它们使用相同的参数使用相同的函数。我怎么解决这个问题?
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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

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

对象的当前值。name变量到Lamba‘sname关键字参数每次通过循环,产生期望的效果。


查看完整回答
反对 回复 2019-06-18
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

它不是一个简单的问题,它是一个关于函数嵌套、闭包等的问题,它也存在于完全不同的上下文中。尽管如此,正如它所描述的那样,+1确实描述了发生了什么。

查看完整回答
反对 回复 2019-06-18
  • 2 回答
  • 0 关注
  • 1289 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信