Python 如何删除框架的内容

Python 如何删除框架的内容,python,tkinter,Python,Tkinter,我有一个框架,里面有几个标签。所有标签中的文本都会定期重新计算,在此之前我想删除框架中的所有内容 最初我认为替换标签的文本就足够了: 虽然文本未被替换,但保留的时间较长: 如何在不删除框架的每个元素的情况下删除框架的内容 请注意,tk.Label调用没有为其分配变量,我有几个Label,在它们显示后,不需要跟踪它们。我想,我可以保留所有标签和.grid的列表,但如果有一个更简单的解决方案,它会带来更干净的代码。由于您总是使用相同的标签,您可以在uu init_u方法中创建它,然后在回调中配置它:

我有一个框架,里面有几个标签。所有标签中的文本都会定期重新计算,在此之前我想删除框架中的所有内容

最初我认为替换标签的文本就足够了:

虽然文本未被替换,但保留的时间较长:

如何在不删除框架的每个元素的情况下删除框架的内容


请注意,tk.Label调用没有为其分配变量,我有几个Label,在它们显示后,不需要跟踪它们。我想,我可以保留所有标签和.grid的列表,但如果有一个更简单的解决方案,它会带来更干净的代码。

由于您总是使用相同的标签,您可以在uu init_u方法中创建它,然后在回调中配置它:

def __init__(self):
    # ...
    self.frame = tk.Frame(self.root).grid(row=0, column=0)
    self.label = tk.Label(self.frame)
    self.label.grid()
    self.root.bind('q', self.toggle)


def toggle(self, event):
    self.counter += 1
    # ...
    # the tk.Label call is not assigned to a variable on purpose
    self.label.config(text=text, bg=bg)
更新:由于您不想对标签使用任何变量,因此可以销毁框架的所有子项:

def toggle(self, event):
    # ...
    for children in self.frame.winfo_children():
        children.destroy()
    tk.Label(self.frame, text=text, bg=bg).grid(row=0, column=0)
请记住,对grid的调用返回None,因此在原始示例中,变量self.frame不包含小部件引用:

def __init__(self):
    self.counter = 0
    self.root = tk.Tk()
    self.frame = tk.Frame(self.root)
    # WRONG
    # self.frame = tk.Frame(self.root).grid(row=0, column=0)
    # RIGHT
    self.frame.grid() # row=0, column=0 comes by default

问题是我不想使用变量,因为我有很多这样的标签。这就是为什么我想删除框架的内容,并重新创建标签。虽然你的解决方案会起作用,但有没有办法破坏框架的内容,我会重新创建标签及其内容。这正是我想要的,谢谢。至于第二点:你是对的,我知道并更正了我在本地运行的代码,但忘了更正我在问题中发布的代码。我已经改正了。
def __init__(self):
    self.counter = 0
    self.root = tk.Tk()
    self.frame = tk.Frame(self.root)
    # WRONG
    # self.frame = tk.Frame(self.root).grid(row=0, column=0)
    # RIGHT
    self.frame.grid() # row=0, column=0 comes by default