2016-12-12 18 views
0

チェックボタンをクリックするとウィジェットが作成されます。チェックボタンをトグルすると、それらを非表示にして再表示する必要があります。ウィジェットを作成することはできますが、ウィジェットを破棄することはできません。私は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

私はそのことを考えていませんでした。私の問題は今解決されました。ありがとう –

関連する問題