Python Tkinter 清除帧

Posted

技术标签:

【中文标题】Python Tkinter 清除帧【英文标题】:Python Tkinter clearing a frame 【发布时间】:2013-03-24 18:59:58 【问题描述】:

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

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

但是 frame.destroy() 将完全删除框架。另外两个也不能给我想要的结果。我需要的只是清除框架中的每个项目,但框架本身会保留。有什么办法吗?

【问题讨论】:

根据任务,您可以在框架中创建一个框架并销毁它 【参考方案1】:

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

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()

【讨论】:

【参考方案2】:

https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/universal.html

w.winfo_children() 返回 w 的所有孩子的列表,在他们的 堆叠顺序从最低(底部)到最高(顶部)。

for widget in frame.winfo_children():
    widget.destroy()

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

我设法通过创建一个函数来解决我的问题,该函数将重新创建我想在每次更新时清除的框架。非常感谢您的帮助 Bryan,您的回答提供了丰富的信息。 @Chris Aung:你介意分享这个功能吗?我正在寻找那个,因为我自己的失败出于某种原因。 这里可以找到一个可行的方法:***.com/a/15995920/1829329

以上是关于Python Tkinter 清除帧的主要内容,如果未能解决你的问题,请参考以下文章

Python清除在Tkinter小部件中使用的列表

python Tkinter 如何清除Text中的文本

如何清除 Tkinter ListBox Python

Tkinter:模糊的透明背景帧

面向对象的 Tkinter - 居中多个帧

通过 Tkinter 类传递数据帧