Несмотря на отсутствие ошибок, мой графический интерфейс Tkinter не запускается.Это почему? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь создать графический интерфейс, который открывает новое окно после нажатия кнопки при уничтожении последнего окна. Я не получаю никаких ошибок, но когда я запускаю свою программу, ничего не появляется.

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 ]

1 голос
/ 28 апреля 2019

У вас много ошибок, о которых я упоминал в комментариях.


Если вы хотите закрыть одно окно и открыть новое, то уничтожьте первое окно - 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()
1 голос
/ 28 апреля 2019

это потому, что когда вы завернули весь код в имя функции team () .

, вы должны вызывать этот метод в соответствующей позиции, чтобы запустить программу.

и убедитесь, что регистр букв в виде метка fuction записан в виде Label () , так что button () is Button() .

, а также вы должны использовать root вместо menu , тогда, надеюсь, вы увидите окно.

упакуйтесодержание в соответствии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...