У вас много ошибок, о которых я упоминал в комментариях.
Если вы хотите закрыть одно окно и открыть новое, то уничтожьте первое окно - 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()