如何在tkinter循环生成控件时传递Label值并点击按钮销毁整个Frame
错误原因
- 拼写错误:Tkinter 组件的销毁方法正确拼写为
destroy,你的代码里写的destory是笔误,因此触发了属性不存在的报错。 - lambda 逻辑错误:你当前写的
lambda:[ (lambda num=num: deleteEvent(num)),f.destory]只是把两个函数对象放到了列表里,没有实际调用执行,就算拼写正确也不会触发打印和删除操作。
修复方案
直接将按钮绑定的command参数修改为如下写法即可:
e3=tk.Button(f, text='delete', command=lambda num=num: (deleteEvent(num), f.destroy()))
说明
- 直接在lambda参数位置绑定当前循环的
num值,规避闭包延迟绑定导致所有按钮都取最后一个num值的问题 - 用逗号分隔两个要执行的操作,运行时会先调用
deleteEvent(num)打印对应文本,再调用f.destroy()删除整个Frame - 修正了销毁方法的拼写错误
内容的提问来源于stack exchange,提问作者daniel chen
相关产品推荐
相关产品推荐

