我的Tkinter GUI不会打开

时间:2016-11-01 21:52:15

标签: python user-interface tkinter

list_ = [0,0]
menu = ""
subpage = ""


def main_menu(root):
    print list_
    menu = Frame(root)
    button0 = Button(menu, text="Go To Subpage",
                 command=lambda: switch_page("sub"))
    button0.grid(row = 0, column = 0)

    button1 = Button(menu, text="Save Values",
                 command=lambda: save_values())
    button1.grid(row = 0, column = 1)

    global entry0
    global entry1

    entry0 = Entry(menu)
    entry1 = Entry(menu)

    entry0.pack()
    entry1.pack()


    return menu


def sub_menu(root):
    subpage = Frame(root)

    label0 = Label(text = list_[0])
    label1 = Label(text = list_[1])

    label0.grid(row = 0, column = 0)
    label1.grid(row = 1, column = 0)

    button2 = Button(subpage, text="Return To Main Page",
                 command = lambda: switch_page("main"))
    button2.grid(row = 0, column = 0)



    return subpage

def save_values():
    list_ = []
    e0 = entry0.get()
    list_.append(e0)
    e1 = entry1.get()
    list_.append(e1)
    print list_

def switch_page(page_name):
    slaves = root.pack_slaves()
    if slaves:
        slaves[0].pack_forget()
    pages[page_name].pack(fill="both", expand=True)

root = Tk()
pages = {
    "main": main_menu(root),
    "sub": sub_menu(root),

}

switch_page("main")
root.mainloop()

所以我的问题是GUI无法打开我已经尝试将它放入另一个新的python文件并尝试重新编写它但略有不同,现在我不会在使用.grid后立即打开()函数,一旦删除了.grid()函数,它将显示GUI。无论如何,对于这段代码,我一点也不确定是什么阻止它打开,因为我所做的研究导致我发现我需要使用root.mainloop(),我已经使用了,另一个解决方案是定义框架长度和宽度,我认为这是不必要的,因为我以前有GUI工作,不仅仅是我有一个用小部件创建的框架。 任何帮助表示赞赏。

另外在切换页面功能的旁注中,我使用.pack_forget()函数,并且正在查看是否有一个功能可以完全关闭页面,或者允许我在页面打开时更改标签一种刷新功能(更新空闲任务不能满足我的需要)

1 个答案:

答案 0 :(得分:0)

您不能同时使用grid并打包与共享同一父级的窗口。你这样做:

...
button0.grid(row = 0, column = 0)
...
entry0.pack()
entry1.pack()

您可以在应用中混合并匹配gridpack所有内容,但是您无法像使用它们那样使用它们,因为这些小部件都有menu个父母。

此外,您可以使用config方法更改任何窗口小部件的属性(例如:some_widget.configure(background="red"))。您需要为该窗口小部件提供引用(变量)。