Python Tkinter:如何显示和隐藏框架类

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

所以我有这样的想法:

在主应用程序类中,我有三个框架类。理想情况下,我会使用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,这很好。当我试着转到第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()

谢谢这正是问题所在。现在已修复,一切正常。谢谢!这正是问题所在。现在是固定的,一切正常。