Создать пустое окно и запустить mainl oop () (событие l oop), чтобы оно оставалось открытым
import tkinter as tk
window = tk.Tk()
window.mainloop()
Чтобы закрыть его, вы можете использовать стандартную кнопку [x] в строке заголовка.
Или вам нужно поместить кнопку в окно, которое запускает window.destroy()
, чтобы закрыть его.
import tkinter as tk
window = tk.Tk()
button = tk.Button(window, text='CLOSE', command=window.destroy)
button.pack()
window.mainloop()
Кстати: в command=
должно быть window.destroy
без ()
. Это "callback"
- имя функции, которая будет выполняться при нажатии кнопки.
В этом примере кнопка запускает функцию, которая закрывает первое окно и создает второе окно.
import tkinter as tk
# --- functions ---
def second_window():
window.destroy()
second = tk.Tk()
button = tk.Button(second, text='CLOSE SECOND', command=second.destroy)
button.pack()
second.mainloop()
# --- main ---
window = tk.Tk()
button = tk.Button(window, text='CLOSE FIRST', command=second_window)
button.pack()
window.mainloop()
Предыдущая версия открывает второе окно, только если вы используете tk.Button()
, но при нажатии [x]
этого не происходит. Вам нужно
window.protocol("WM_DELETE_WINDOW", second_window)
для запуска second_window
при нажатии [x]
import tkinter as tk
# --- functions ---
def second_window():
window.destroy()
second = tk.Tk()
button = tk.Button(second, text='CLOSE SECOND', command=second.destroy)
button.pack()
second.mainloop()
# --- main ---
window = tk.Tk()
button = tk.Button(window, text='CLOSE FIRST', command=second_window)
button.pack()
window.protocol("WM_DELETE_WINDOW", second_window)
window.mainloop()
Вы даже можете запустить код, который закроет и снова создаст то же окно
import tkinter as tk
# --- functions ---
def first_window():
global window
if window:
window.destroy()
#window = None
window = tk.Tk()
button = tk.Button(window, text='CLOSE FIRST', command=first_window)
button.pack()
window.protocol("WM_DELETE_WINDOW", first_window)
window.mainloop()
# --- main ---
window = None
first_window()
В этом примере я использую window = None
, чтобы проверить, существует ли окно, и закройте его. Вы можете использовать этот метод, чтобы закрыть первое окно при создании нового окна.
В этом примере я использую first_window = None
и second_window = None
, поэтому я могу проверить, открыто ли другое окно, и закрыть его.
import tkinter as tk
# --- functions ---
def open_second_window():
global first_window
global second_window
if first_window:
first_window.destroy()
first_window = None
second_window = tk.Tk()
button = tk.Button(second_window, text='OPEN FIRST', command=open_first_window)
button.pack()
second_window.protocol("WM_DELETE_WINDOW", open_first_window)
second_window.mainloop()
def open_first_window():
global first_window
global second_window
if second_window:
second_window.destroy()
second_window = None
first_window = tk.Tk()
button = tk.Button(first_window, text='OPEN SECOND', command=open_second_window)
button.pack()
first_window.protocol("WM_DELETE_WINDOW", open_second_window)
first_window.mainloop()
# --- main ---
first_window = None
second_window = None
open_first_window()
Но я не знаю, зачем вам закрывать одно окно и открывать другое. Вы можете скрыть первое окно, если позже захотите go вернуться к первому окну. Или вы можете оставить виджеты в Frame()
и удалить / этот кадр, чтобы показать другой кадр.