动态页面创建tkinter

时间:2016-09-02 14:58:31

标签: user-interface tkinter python-3.4

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

我试图在这里通过创建一个Page类来创建它,该类在字典中仅使用一个数字列表进行实例化,但是我似乎无法显示StartPage,所有显示的都是Page之一页面。我的源代码:

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)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

创建grid后您没有调用StartPage,因此它将无形。创建StartPage后添加以下内容:

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

你还有另外一个问题,就是你将StartPage放在索引4处,但你已经在索引4处有一个框架。这个问题没有解决问题,但它会导致问题当你试图看到另一页时。