我正在尝试完全清除 tkinter 窗口。但是,我需要一种方法来一次性清除窗口中的每个小部件,而无需使用 pack.forget()
。
原文由 Oliver Sinnassamy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试完全清除 tkinter 窗口。但是,我需要一种方法来一次性清除窗口中的每个小部件,而无需使用 pack.forget()
。
原文由 Oliver Sinnassamy 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要做的是为您的主窗口设置一个框架,并将所有要清除的内容放在该框架内的某个位置。然后你只需做 frame_name.destroy()
下面的示例有一个按钮,它创建一个包含多个标签小部件和一个按钮的框架。
该按钮调用一个方法,该方法将破坏框架及其中的所有内容。
然后您可以使用第一个按钮再次创建框架。
如果您有任何问题,请告诉我:
import tkinter as tk
class ExampleApp(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.some_frame = None
tk.Button(self.master, text="Create new frame with widgets!", command = self.create_stuff).pack()
def create_stuff(self):
if self.some_frame == None:
self.some_frame = tk.Frame(self.master)
self.some_frame.pack()
for i in range(5):
tk.Label(self.some_frame, text = "This is label {}!".format(i+1)).pack()
tk.Button(self.some_frame, text="Destroy all widgets in this frame!",
command= self.destroy_some_frame).pack()
def destroy_some_frame(self):
self.some_frame.destroy()
self.some_frame = None
root = tk.Tk()
my_example = ExampleApp(root)
root.mainloop()
原文由 Mike - SMT 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答974 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
您可以使用一个简单的递归循环来列出主窗口的所有子 wigets:
然后只需使用此列表: