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

在python中使用参数动态设置回调

在python中使用参数动态设置回调

慕侠2389804 2021-03-22 17:12:58
我正在尝试通过以列表形式存储的一组数据在tkinter中动态构建一些按钮。我无法解决的事情是如何在回调函数中添加参数。由于回调中的代码要等到回调时间才执行,因此此时回调中使用的变量已更改值。这是(非常)简化的代码版本:from Tkinter import *from ttk import *mylist = ['a','b','c','d','e']class App:    def __init__(self, master):        self.frame = Frame(master)        self.frame.pack()        for i in range (0,len(mylist)):            setattr(self, 'button' + str(i), Button(self.frame, text=mylist[i], command= lambda: self.buttoncall(i)))            getattr(self, 'button' + str(i)).pack(side=LEFT)    def buttoncall(self,input):        print mylist[input]root = Tk()app = App(root)root.mainloop()
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

为以下项设置默认值i

command=lambda i=i: self.buttoncall(i)

当不带任何参数调用回调时,的默认值i将绑定到本地变量i。由于默认值在定义lambda时是固定的,因此的值i将是所需的值。

如果没有默认值i,则在调用回调时,i它不是局部变量。取而代之的是i,Python在封闭范围内找到的值。但是,到回调调用时,回调for-loop已经完成,i并且等于len(mylist)-1。因此,所有回调都使用的相同值i


查看完整回答
反对 回复 2021-03-27
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

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