所以我有这样的事情:
在主app类中,我有三个框架类。理想情况下,我会使用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:
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,这很好。当我尝试去Page1时,那也很好。但之后我不能回到StartPage。当我尝试时它会显示为空。有一点让我担心的是,当调用f.grid_forget(self)时,编译器坚持要给它一个参数“self”,否则我不需要。我想知道这可能是问题的根源。
TIA!
答案 0 :(得分:2)
你的问题在于这个循环:
for f in self.frames:
...
在循环中,f
将是类,而不是实例。由于self.frames
是一个字典,其中实际的帧是值,因此您需要遍历值:
for f in self.frames.values():
f.grid_forget()