2

昨天我问了这个问题通过循环 Tkinter 创建元素来了解如何动态创建一些项目符号点。现在我希望添加一个清除按钮,以便在按下时重置整个表单。我尝试将列表设置回 [] 但它不起作用。

编辑 - 所以基本上当我按下重置时,我希望它看起来与加载表单时完全一样。

4

2 回答 2

4

使用以下方法删除按钮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()
于 2013-03-27T12:44:45.957 回答
2

重新设置列表(即使用self.button = [])只会清除存储在button变量中的数据。仅该操作不连接到用户界面 (UI)。您必须明确删除(通过onEnter方法)创建的小部件对象。

因此,通过扩展上一个问题的答案,您正在寻找的清算功能应该是可行的。向类添加一个onClear方法,ButtonBlock以便在选择“清除”控件(即使用按钮小部件)时调用其回调函数ButtonBlock.onClear(),类似于Entry小部件调用该onEnter方法的方式。

编辑:请参阅 unutbu 对此问题的回答。选中后,clear_button控件调用ButtonBlock.onClear(). for 循环onClear从列表中获取对每个按钮 ojbect 的引用,button并调用对象的destroy方法,将其从 UI 中删除。

于 2013-03-27T12:47:46.433 回答