我正在构建一个图像处理方法 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
返回子部件列表。外循环获取所有选项卡框架,然后内循环销毁每个框架的选项卡内容。isinstance
函数。这将检查小部件是否是画布,如果不是则只会销毁它。
for tab in tabControl.winfo_children():
for child in tab.winfo_children():
if not isinstance(child, tk.Canvas):
child.destroy()
我遇到了这个问题如何在 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()