Tkinter:如何显示和隐藏Frame类

时间:2017-05-12 15:17:40

标签: python tkinter

所以我有这样的事情:

在主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!

1 个答案:

答案 0 :(得分:2)

你的问题在于这个循环:

for f in self.frames:
    ...

在循环中,f将是,而不是实例。由于self.frames是一个字典,其中实际的帧是值,因此您需要遍历值:

for f in self.frames.values():
    f.grid_forget()
相关问题