如何在 tkinter 中删除多个帧?

问题描述 投票:0回答:2

我正在构建一个图像处理方法 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)
python image user-interface tkinter image-processing
2个回答
2
投票

您可以使用

winfo_children
来执行此操作。

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

winfo_children
返回子部件列表。外循环获取所有选项卡框架,然后内循环销毁每个框架的选项卡内容。
编辑
如果不删除画布,可以使用
isinstance
函数。这将检查小部件是否是画布,如果不是则只会销毁它。

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

0
投票

我遇到了这个问题如何在 tkinter 中删除多个帧,今天我采用了这个解决方案。希望对其他Python学习者有所帮助。这是我的代码:

import os
from tkinter import *
from tkinter import messagebox

os.system('cls||clear')
window = Tk()
window.title("Menu Bar")

frames = []

def delete_frames():

    Frame.destroy(frames.pop()) 
    if frames == []:
        messagebox.showinfo("Warning","All frames were Deleted")

def new_text():

    frame = Frame(window, width=300, height=180)
    frame.pack_propagate(False)  
    frame.pack()

    txt = Text(frame,wrap='word')
    txt.pack(expand=True, fill='both') 

    frames.append(frame)
    print(frames)

    v_scroll_bar = Scrollbar(txt,orient=VERTICAL,command=txt.yview) 
    v_scroll_bar.pack(side = RIGHT, fill="y")
    txt.config(yscrollcommand=v_scroll_bar.set)

txt_btn = Button(window,text="Create Frames",command=new_text)
txt_btn.pack()

del_frames = Button(window,text="Delete Frames", command= delete_frames)
del_frames.pack(padx=220)

window.geometry("750x850")
window.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.