我试图清除tkinter中的一个帧,以便可以写入新内容(刷新信息),但我无法做到。我知道这些
frame.destroy()
frame.pack_forget()
frame.grid_forget()
但是frame.destroy()将完全删除框架。而另外两个也无法给我我想要的结果。我需要的只是清理框架中的每个项目,但框架本身将保持。反正有吗?
答案 0 :(得分:51)
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html
w.winfo_children()
返回所有w的孩子的列表 堆叠顺序从最低(底部)到最高(顶部)。
for widget in frame.winfo_children():
widget.destroy()
将销毁框架中的所有小部件。不需要第二帧。
答案 1 :(得分:19)
pack_forget
和grid_forget
只会从视图中删除小部件,但不会销毁它们。如果您不打算重新使用小部件,那么您唯一真正的选择是使用destroy
方法销毁它们。
要做到这一点,你有两个选择:单独销毁每一个,或者销毁会导致其所有子项被销毁的框架。后者通常是最简单和最有效的。
由于您声称不想销毁容器框架,因此请创建辅助框架。让这个辅助框架成为您要删除的所有窗口小部件的容器,然后将这一个框架放在 not 想要销毁的父窗口中。然后,这只是破坏这一帧的问题,所有的内部小部件都会随之被破坏。
答案 2 :(得分:2)
要获得清晰的框架,首先需要破坏框架内的所有小部件。它将清除框架。
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()