尽管没有任何错误,我的Tkinter GUI却无法运行。这是为什么?

时间:2019-04-28 03:06:55

标签: python tkinter

我正在尝试创建一个GUI,该GUI在破坏最后一个窗口的同时按下按钮后会打开一个新窗口。我没有收到任何错误,但是当我运行程序时,什么也没出现。

from Tkinter import *

def team():

    def table():
        table = Toplevel(contributers)
        contributers.destroy()
    def contributers():
        contributers = Toplevel(table)
        table.destroy()
    def firstpage():
        firstpage = Toplevel(letsbegin)
        letsbegin.destroy()
    def secondpage():
        secondpage = Toplevel(firstpage)
        firstpage.destroy()
    def leave():
        exit()

    root = Tk()
    root.title("Team Blue")
    label1 = label(menu, text="Team Blue", bg = "Yellow", fg="Black")
    button1 = button(menu, text="ENTER", width=15, bg="yellow", fg="Black", command =contributers)
    button2 = button(menu, text="Exit", bg="red", fg="white", command=leave)
    root.mainloop()

我只想运行这段代码

2 个答案:

答案 0 :(得分:1)

这是因为当您将整个代码包装在功能名称 team()中时。

因此,必须在适当位置调用该方法才能运行程序。

,请确保将作为 label 功能的字母大小写写为 Label() button()也是 Button ()

,而且您还必须使用 root 代替菜单,然后希望您看到窗口。

包装内容。

答案 1 :(得分:1)

您有很多我在评论中提到的错误。


如果您想关闭一个窗口并打开新窗口,则销毁第一个窗口-root.destroy()-然后再次使用Tk()创建新窗口并再次使用mainloop()

我将新窗口分配给全局变量root,因此我可以使用几乎相同的代码关闭第二个窗口并打开第三个窗口。

我使用global root,因此变量root不是局部变量,而是全局变量,可以使用其他功能(分配给root的窗口)。

from Tkinter import *

# --- functions ---

def open_first_window():
    global root

    root = Tk()
    label1 = Label(root, text="Team Brake 'Em")
    label1.pack()

    button1 = Button(root, text="Open Second Window", command=open_second_window)
    button1.pack()

    button2 = Button(root, text="Exit", command=root.destroy)
    button2.pack()

    root.mainloop()

def open_second_window():
    global root

    root.destroy()

    root = Tk()
    label1 = Label(root, text="Second Window")
    label1.pack()

    button1 = Button(root, text="Open Third Window", command=open_third_window)
    button1.pack()

    button2 = Button(root, text="Exit", command=root.destroy)
    button2.pack()

    root.mainloop()

def open_third_window():
    global root

    root.destroy()

    root = Tk()
    label1 = Label(root, text="Third Window")
    label1.pack()

    button2 = Button(root, text="Exit", command=root.destroy)
    button2.pack()

    root.mainloop()

# --- main ---

open_first_window() 

还有另一种流行的方法-不要重试窗口,而是删除所有小部件并放入新的小部件。小部件Frame可能有用,因为您可以将所有小部件都放在Frame中,而Frame可以放在Window中,以后您只需要删除Frame并放入新的Frame带有新的小部件。

from Tkinter import *

# --- function ---

def create_first_frame():
    global root
    global frame

    #frame.destroy()

    frame = Frame()
    frame.pack()

    label1 = Label(frame, text="Team Brake 'Em")
    label1.pack()

    button1 = Button(frame, text="Open Second Window", command=create_second_frame)
    button1.pack()

    button2 = Button(frame, text="Exit", command=root.destroy)
    button2.pack()

def create_second_frame():
    global root
    global frame

    frame.destroy()

    frame = Frame()
    frame.pack()

    label1 = Label(frame, text="Second Window")
    label1.pack()

    button1 = Button(frame, text="Open Third Window", command=create_third_frame)
    button1.pack()

    button2 = Button(frame, text="Exit", command=root.destroy)
    button2.pack()

def create_third_frame():
    global root
    global frame

    frame.destroy()

    frame = Frame()
    frame.pack()

    label1 = Label(frame, text="Third Window")
    label1.pack()

    button2 = Button(frame, text="Exit", command=root.destroy)
    button2.pack()

# --- main ---

root = Tk()
create_first_frame()
root.mainloop()