如何在 tkinter 中删除多个帧?

How to delete multiple frames in tkinter?

我正在构建一个图像处理方法 GUI,因为我使用 Tkinter 的笔记本功能创建了一些框架以在每个框架中将各种方法显示为选项卡。我如何创建一个删除所有四个帧的函数,以便在我导入第二个图像时删除第一个图像并将新导入的图像添加到帧中?

我试过 winfo_children 函数来销毁帧,但它一次只对一帧有效。我还尝试遍历所有帧。我的技能不足以思考这个问题。所以,我需要一个建议或任何我缺少的东西。

非常感谢您抽出宝贵时间提供任何帮助。

tabControl = ttk.Notebook(root)

tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tab3 = ttk.Frame(tabControl)
tab4 = ttk.Frame(tabControl)

tabControl.add(tab1, text='Imported Image')
tabControl.add(tab2, text='Method 1')
tabControl.add(tab3, text='Method 2')
tabControl.add(tab4, text='Method 3')
tabControl.pack(expand=1, fill="both")

frame1_title=  tk.Label(tab1,bd=10)
frame1_title.pack(fill='both', expand=True)

frame2_title=  tk.Label(tab2, font='times 35')
frame2_title.pack(fill='both', expand=True)

frame3_title=  tk.Label(tab3,font='times 35')  
frame3_title.pack(fill='both', expand=True)

您可以使用 winfo_children 来执行此操作。

for tab in tabControl.winfo_children():
    for child in tab.winfo_children():
        child.destroy()

winfo_children returns 子控件列表。外层循环获取所有tab frames,然后内层循环销毁每一帧的tab内容。
编辑
要不删除canvas,可以使用isinstance函数。这将检查小部件是否是 canvas 并且只有在不是时才会销毁它。

for tab in tabControl.winfo_children():
    for child in tab.winfo_children():
        if not isinstance(child, tk.Canvas):
            child.destroy()