清除帧的Python Tkinter

清除帧的Python Tkinter,python,tkinter,frame,Python,Tkinter,Frame,我试图清除tkinter中的一个框架,以便可以写入新内容(刷新信息),但我无法做到这一点。我知道这些 frame.destroy() frame.pack_forget() frame.grid_forget() 但是frame.destroy()将完全删除该帧。另外两个也不能给我想要的结果。我需要的只是清除框架中的所有项目,但框架本身将保持。还有其他方法吗?pack\u-forget和grid\u-forget只会从视图中删除小部件,不会破坏它们。如果您不打算重新使用这些小部件,那么您唯一真

我试图清除tkinter中的一个框架,以便可以写入新内容(刷新信息),但我无法做到这一点。我知道这些

frame.destroy()
frame.pack_forget()
frame.grid_forget()

但是frame.destroy()将完全删除该帧。另外两个也不能给我想要的结果。我需要的只是清除框架中的所有项目,但框架本身将保持。还有其他方法吗?

pack\u-forget
grid\u-forget
只会从视图中删除小部件,不会破坏它们。如果您不打算重新使用这些小部件,那么您唯一真正的选择就是使用
destroy
方法销毁它们

要做到这一点,您有两种选择:分别销毁每一个框架,或者销毁将导致其所有子框架被销毁的框架。后者通常是最简单和最有效的

由于您声明不希望破坏容器框架,请创建一个辅助框架。让这个次要框架成为所有要删除的小部件的容器,然后将这个框架放在不想破坏的父框架内。然后,只需销毁这一帧,所有内部小部件都将随之销毁。

w、 winfo_children()
返回w的所有子项的列表,以其 从最低(底部)到最高(顶部)的堆叠顺序


将销毁框架中的所有小部件。不需要第二个框架。

要清除框架,首先需要销毁框架内的所有小部件,。它将清除框架

import tkinter as tk
from tkinter import *
root = tk.Tk()

frame = Frame(root)
frame.pack(side="top", expand=True, fill="both")

lab = Label(frame, text="hiiii")
lab.grid(row=0, column=0, padx=10, pady=5)

def clearFrame():
    # destroy all widgets from frame
    for widget in frame.winfo_children():
       widget.destroy()
    
    # this will clear frame and frame will be empty
    # if you want to hide the empty panel then
    frame.pack_forget()

frame.but = Button(frame, text="clear frame", command=clearFrame)
frame.but.grid(row=0, column=1, padx=10, pady=5)

# then whenever you add data in frame then you can show that frame
lab2 = Label(frame, text="hiiii")
lab2.grid(row=1, column=0, padx=10, pady=5)
frame.pack()
root.mainloop()

根据任务的不同,您可以在框架中创建一个框架并销毁它。我通过创建一个函数来解决我的问题,该函数将在每次需要更新时重新创建我要清除的框架。非常感谢您的帮助Bryan,您的回答提供了信息。@Chris Aung:您介意共享该函数吗?我正在寻找这一点,因为我自己的方法由于某种原因而失败。在这里可以找到一种有效的方法:
import tkinter as tk
from tkinter import *
root = tk.Tk()

frame = Frame(root)
frame.pack(side="top", expand=True, fill="both")

lab = Label(frame, text="hiiii")
lab.grid(row=0, column=0, padx=10, pady=5)

def clearFrame():
    # destroy all widgets from frame
    for widget in frame.winfo_children():
       widget.destroy()
    
    # this will clear frame and frame will be empty
    # if you want to hide the empty panel then
    frame.pack_forget()

frame.but = Button(frame, text="clear frame", command=clearFrame)
frame.but.grid(row=0, column=1, padx=10, pady=5)

# then whenever you add data in frame then you can show that frame
lab2 = Label(frame, text="hiiii")
lab2.grid(row=1, column=0, padx=10, pady=5)
frame.pack()
root.mainloop()