昨天我问了这个问题通过循环 Tkinter 创建元素来了解如何动态创建一些项目符号点。现在我希望添加一个清除按钮,以便在按下时重置整个表单。我尝试将列表设置回 [] 但它不起作用。
编辑 - 所以基本上当我按下重置时,我希望它看起来与加载表单时完全一样。
昨天我问了这个问题通过循环 Tkinter 创建元素来了解如何动态创建一些项目符号点。现在我希望添加一个清除按钮,以便在按下时重置整个表单。我尝试将列表设置回 [] 但它不起作用。
编辑 - 所以基本上当我按下重置时,我希望它看起来与加载表单时完全一样。
使用以下方法删除按钮destroy
:
for button in self.button:
button.destroy()
import Tkinter as tk
class ButtonBlock(object):
def __init__(self, master):
self.master = master
self.button = []
self.button_val = tk.IntVar()
entry = tk.Entry()
entry.grid(row=0, column=0)
entry.bind('<Return>', self.onEnter)
entry.focus()
clear_button = tk.Button(master, text='Clear', command=self.onClear)
clear_button.grid(row=0, column=1)
def onClear(self):
for button in self.button:
button.destroy()
def onEnter(self, event):
entry = event.widget
num = int(entry.get())
self.onClear()
for i in range(1, num+1):
self.button.append(tk.Radiobutton(
self.master, text=str(i), variable=self.button_val, value=i,
command=self.onSelect))
self.button[-1].grid(sticky='WENS', row=i, column=0, padx=1, pady=1)
def onSelect(self):
print(self.button_val.get())
if __name__ == '__main__':
root = tk.Tk()
ButtonBlock(root)
root.mainloop()
重新设置列表(即使用self.button = []
)只会清除存储在button
变量中的数据。仅该操作不连接到用户界面 (UI)。您必须明确删除(通过onEnter
方法)创建的小部件对象。
因此,通过扩展上一个问题的答案,您正在寻找的清算功能应该是可行的。向类添加一个onClear
方法,ButtonBlock
以便在选择“清除”控件(即使用按钮小部件)时调用其回调函数ButtonBlock.onClear()
,类似于Entry
小部件调用该onEnter
方法的方式。
编辑:请参阅 unutbu 对此问题的回答。选中后,clear_button
控件调用ButtonBlock.onClear()
. for 循环onClear
从列表中获取对每个按钮 ojbect 的引用,button
并调用对象的destroy
方法,将其从 UI 中删除。