python-tkinter 动态批量创建按钮并绑定带参事件


首先动态创建按钮,操作比较简单,也很多类似范例
import tkinter as tk
import tkinter.messagebox as msg

cb_list = ['cmd1', 'cmd2', 'cmd3']
win = tk.Tk()

for inx, cmd in enumerate(cb_list):
    tk.Button(win, width=10, height=1, text=cmd).grid(row=0, column=inx)

win.mainloop()

在这里插入图片描述


然后,尝试给按钮绑定事件。
由于按钮是动态创建,那么绑定的事件,就需要通过参数来区分,是哪一个按钮点击触发的。
同样找到一些范例,大多类似以下lambda的写法
import tkinter as tk
import tkinter.messagebox as msg

def cbClicked(cbname):
    print(cbname)
    msg.showinfo('您点击了', cbname)

cb_list = ['cmd1', 'cmd2', 'cmd3']
win = tk.Tk()

for inx, cbname in enumerate(cb_list):
    tk.Button(win, width=10, height=1, text=cbname, command = lambda:cbClicked(cbname))\
        .grid(row=0, column=inx)

win.mainloop()

但实际运行结果发现,传递的参数都是 ‘cmd3’,并没有实现上叙目的。

python-tkinter 动态批量创建按钮并绑定带参事件_第1张图片


再次查看相关文档,修改lambda
command = lambda arg=cbname:cbClicked(arg)
最终实现,动态创建按钮,并绑定事件且动态传参。效果如图:

python-tkinter 动态批量创建按钮并绑定带参事件_第2张图片

你可能感兴趣的:(python)