如何从窗口中删除Tkinter小部件?

The*_*rry 44 python tkinter

我有一个我想要动态更改的Tkinter小部件列表.

如何从窗口中完全删除小部件?

slo*_*oth 66

您可以调用pack_forget删除小部件(如果您使用pack它将其添加到窗口).

例:

from tkinter import *

root = Tk()

b = Button(root, text="Delete me", command=lambda: b.pack_forget())
b.pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

如果您使用pack_forget,您可以稍后再次显示小部件pack.如果要永久删除它,请调用destroy小部件(然后您将无法重新添加它).

如果你使用的grid方法,你可以使用grid_forgetgrid_remove隐藏的窗口小部件.

  • @TheBeardedBerry:请注意`pack_forget`不会删除小部件,它只会从视图中删除它们.它们仍然存在,如果你继续重建小部件而不破坏它们,可能会导致内存泄漏. (8认同)
  • 如果我'pack_forget`一个Frame然后删除它,它是否会删除子窗口小部件,还是应该单独删除它们? (4认同)

Ozi*_*iro 14

你可以做到的一种方法是从需要清除的框架中​​获取奴隶清单,并根据你的需要销毁或"隐藏"它们.要获得清晰的框架,您可以这样做:

from tkinter import *

root = Tk()

def clear():
    list = root.grid_slaves()
    for l in list:
        l.destroy()

Label(root,text='Hello World!').grid(row=0)
Button(root,text='Clear',command=clear).grid(row=1)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

您应该调用grid_slaves(),pack_slaves()或者slaves()根据您用于将窗口小部件添加到框架的方法.


Fee*_*tak 5

您只需使用该destroy()方法删除指定的小部件,如下所示:

lbl = tk.Label(....)

btn = tk.Button(....., command=lambda: lbl.destroy())
Run Code Online (Sandbox Code Playgroud)

使用它,您可以完全销毁特定的小部件。