Python Tkinter清除帧

Chr*_*ung 29 python tkinter frame

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

frame.destroy()
frame.pack_forget()
frame.grid_forget()
Run Code Online (Sandbox Code Playgroud)

但frame.destroy()将完全删除框架.而另外两个也无法给我我想要的结果.我需要的只是清理框架中的每个项目,但框架本身将保留.无论如何要做到这一点?

小智 59

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html

w.winfo_children()
以最低(最低)到最高(顶部)的堆叠顺序返回所有w子节点的列表.

for widget in frame.winfo_children():
    widget.destroy()
Run Code Online (Sandbox Code Playgroud)

将破坏框架中的所有小部件.不需要第二帧.


Bry*_*ley 23

pack_forget并且grid_forget只会从视图中删除小部件,它不会破坏它们.如果您不打算重新使用小部件,那么您唯一真正的选择是使用该destroy方法销毁它们.

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

由于您声称不想销毁容器框架,因此请创建辅助框架.有这样的次框架对所有要删除的小部件的容器,然后把你的父母这里面一帧希望破坏.然后,这只是破坏这一帧的问题,所有内部小部件都将随之被破坏.

  • 在这里可以找到一种有效的方法:http://stackoverflow.com/a/15995920/1829329 (2认同)

小智 7

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

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()
Run Code Online (Sandbox Code Playgroud)