问题描述
很抱歉,我感到自己的问题很容易解决,但我什至无法尝试/搜索网络!
我正在做一个基于SeaOfBTCmodel的应用程序,该应用程序包含一个多框架项目。到目前为止,它运行良好(即使我不是100%地确定这是实现目标的最佳方法),但是我确实有一个问题:打开页面时,我希望将其重新初始化。但是,如果我已经使用过它并在输入中输入了一些值,那么当返回同一页面时,这些值仍然会存在。
当用tkraise使帧重新出现时,我不知道如何重新初始化帧。不过,另一种解决方案是在从菜单移至另一帧时破坏框架。
这是我可以用来展示整个机制的最基本的代码:
import tkinter as tk
class SeaOfBTC(tk.Tk):
def __init__(self,*args,**@R_404_4868@):
tk.Tk.__init__(self,**@R_404_4868@)
container = tk.Frame(self)
container.pack(side='top',fill='both',expand=True)
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0,weight=1)
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar,tearoff=0)
filemenu.add_command(label='StartPage',command=lambda: self.show_frame(StartPage))
filemenu.add_separator()
filemenu.add_command(label='PageOne',command=lambda: self.show_frame(PageOne))
menubar.add_cascade(label='Pages',menu=filemenu)
tk.Tk.config(self,menu=menubar)
self.frames = {}
for F in (StartPage,PageOne):
frame = F(container,self)
self.frames[F] = frame
frame.grid(row=0,column=0,sticky='nsew')
self.show_frame(StartPage)
def show_frame(self,cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self,text="StartPage")
label.pack(pady=10,padx=10)
class PageOne(tk.Frame):
def __init__(self,parent)
label = tk.Label(self,text='PageOne')
label.pack(pady=10,padx=10)
my_entry = tk.Entry(self,textvariable='')
my_entry.pack(padx=10,pady=10)
app = SeaOfBTC()
app.geometry("300x300")
app.mainloop()
我猜可以在show_frame函数中解决。
我尝试使用frame.__init__()
,但是我收到一条错误消息,要求我提供父级和控制器参数:即使测试了一些东西,我也不知道该使用什么。
如果要使用.destroy(frame)
,它将不再打开。
预先感谢您对这个问题的帮助,也许您对整体的了解!
祝一切顺利
解决方法
我使用了Stevoisiak提出的方法。看起来可能会导致内存问题,所以我使用了gc模块。 经过一些测试,它看起来可以正常工作。
尽管如此,我仍然不反对使用第一种方法回答我的问题,只是为了理解/学习一些东西!
谢谢大家阅读,