2016-12-12 70 views
0

我想點擊一個checkbutton創建一些小部件。然後我需要他們隱藏並重新出現在切換檢查按鈕上。我能夠創建小部件,但無法銷燬它們。我試過grid_remove()grid_forget()destroy()。該聲明旨在隱藏或銷燬它們似乎正在執行,但小部件保持不變。沒有錯誤報告。無法銷燬tkinter中的小部件。

下面是一些代碼來重現問題:

from tkinter import * 
from tkinter.ttk import * 

class Example(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Checkbutton") 
     self.pack(fill=BOTH, expand=True) 
     self.var = BooleanVar() 
     cb = Checkbutton(self, text="Show title", 
      variable=self.var, command=self.onClick) 
     cb.grid(row=2, column=2) 

    def onClick(self): 
     widget = Label(self, text="Enter text") 
     if self.var.get(): 
      self.master.title("Checkbutton") 
      widget.grid(row=3, column=2, padx=10, pady=10) 
     else: 
      self.master.title("") 
      widget.destroy() 

root = Tk() 
app = Example(root) 
root.mainloop() 

回答

2

在你的代碼,你點擊CheckButton,每次onClick創建Label部件。而你的if-else條件會破壞那個剛剛創建的新小部件,但不是這個小部件。您應該通過self.widget = Label鏈接您的小部件。現在函數將刪除在過去的函數調用中創建的元素。

您的代碼將是:

from tkinter import * 
from tkinter.ttk import * 

class Example(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Checkbutton") 
     self.pack(fill=BOTH, expand=True) 
     self.var = BooleanVar() 
     cb = Checkbutton(self, text="Show title", 
      variable=self.var, command=self.onClick) 
     cb.grid(row=2, column=2) 

    def onClick(self): 
     if self.var.get(): 
      self.widget = Label(self, text="Enter text") 
      self.master.title("Checkbutton") 
      self.widget.grid(row=3, column=2, padx=10, pady=10) 
     else: 
      self.master.title("") 
      self.widget.destroy() 

root = Tk() 
app = Example(root) 
root.mainloop() 
+0

我沒有想到這一點。我的問題現在解決了。謝謝 –