我想在点击一个支票按钮时创建一些小部件。然后我需要它们隐藏并重新出现在切换按钮上。我能够创建小部件,但无法销毁它们。我尝试过grid_remove()
,grid_forget()
和destroy()
。旨在隐藏或销毁它们的声明似乎正在执行,但小部件仍然存在。没有报告错误。
以下是一些重现问题的代码:
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()
答案 0 :(得分: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()