2013-03-27 26 views

回答

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() 
+0

這工作了魅力,謝謝。 – Arktri 2013-03-27 12:57:50

2

設置列表背面(使用即self.button = [])剛剛清除存儲在button變量的數據。該行爲本身並沒有連接到用戶界面(UI)。您必須顯式刪除創建的小部件對象(由onEnter方法)。

所以,你正在尋找的結算功能,應該從以前的問題,延長了answer是可行的。一個onClear方法添加到ButtonBlock類,這樣當你的「清除」控制(即使用一個按鈕控件),選擇它的回調函數調用ButtonBlock.onClear(),類似於您Entry小部件如何調用onEnter方法。

編輯:請參閱unutbu對此問題的回答。選中時,clear_button控件調用ButtonBlock.onClear()。 for循環中onClear得到從button列表中每個按鈕ojbect的引用,並調用對象的方法destroy,從UI中刪除。

相關問題