Python Tkinter:如何显示和隐藏框架类
所以我有这样的想法: 在主应用程序类中,我有三个框架类。理想情况下,我会使用show_frame来忘记所有这些,而只使用我指定的网格Python Tkinter:如何显示和隐藏框架类,python,tkinter,Python,Tkinter,所以我有这样的想法: 在主应用程序类中,我有三个框架类。理想情况下,我会使用show_frame来忘记所有这些,而只使用我指定的网格 self.frames = {} for F in (StartPage, Page1, Page2): frame = F(container, self) self.frames[F] = frame self.show_frame(StartPage) def show_frame(self, cont): for f in
self.frames = {}
for F in (StartPage, Page1, Page2):
frame = F(container, self)
self.frames[F] = frame
self.show_frame(StartPage)
def show_frame(self, cont):
for f in self.frames:
f.grid_forget(self)
frame = self.frames[cont]
frame.grid(row=0, column = 0, sticky='nsew')
这是Frame类的一个示例
class StartPage(tk.Frame):
def __init__(self, container, parent):
我的问题是,它没有按预期工作。当它启动时,只显示StartPage,这很好。当我试着转到第1页时,也没关系。但在那之后,我不能再回到起始页了。当我尝试时,它会显示为空。我关心的一件事是,当调用f.grid_-forget(self)时,编译器坚持要我给它一个参数“self”,否则我不需要这样做。我想知道这是否是问题的根源
蒂亚 您的问题在于此循环:
for f in self.frames:
...
在循环中,f
将是一个类,而不是一个实例。由于self.frames
是一个以实际帧为值的字典,因此您希望在值上循环:
for f in self.frames.values():
f.grid_forget()
您的问题在于此循环:
for f in self.frames:
...
在循环中,f
将是一个类,而不是一个实例。由于self.frames
是一个以实际帧为值的字典,因此您希望在值上循环:
for f in self.frames.values():
f.grid_forget()
谢谢这正是问题所在。现在已修复,一切正常。谢谢!这正是问题所在。现在是固定的,一切正常。