动态页面创建 tkinter

Dynamic Page creation tkinter

我正在关注此 link 中的 Python 代码示例。我的最终目标是尝试使用数据库查询创建动态数量的页面。该查询将 return 一个项目列表,我可以创建一个字典条目,将每个项目实例化为一个页面。

我试图通过创建一个页面 class 来创建它,它在字典中实例化,只有一个数字列表,但是我似乎无法显示 StartPage,所有显示的是页面之一。我的源代码:

class SeaofBTCapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        database_pages = [1, 2, 3, 4]

        count = 0
        for p in database_pages:
            page_num = p
            frame = Page(container, self)
            self.frames[page_num] = frame
            frame.grid(row=0, column=0, sticky="nsew")
            count += 1

        self.frames[count] = StartPage(container, self)
        self.show_frame(count)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class Page(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        label = tk.Label(self, text="label for Page")
        label.pack()

我尝试将其添加为字典条目并调用该键。我没有收到任何错误,但 StartPage 不可见。如何在开始时显示 StartPage?有没有更好的方法来实现这个?

编辑

按照提示,我修改了:

    self.frames[count] = StartPage(container, self)
    self.show_frame(count)

至:

    frame = StartPage(container, self)
    self.frames[count + 1] = frame
    frame.grid(row=0, column=0, sticky='nsew')
    self.show_frame(count + 1)

感谢您的帮助!

您在创建 StartPage 后没有调用 grid,因此它将不可见。创建 StartPage 后添加以下内容:

start.grid(row=0, column=0, sticky="nsew")

你有另一个问题,你将 StartPage 放在索引 4 处,但你已经在索引 4 处有一个框架。这不会导致这个问题的问题,但是当你尝试查看其他页面。