===== Toplevel =====
Toplevel[[https://ru.wikiversity.org/wiki/Курс_по_библиотеке_Tkinter_языка_Python#cite_note-5|[5]]] - окно верхнего уровня. Обычно используется для создания многооконных программ, а также для диалоговых окон.
Методы виджета
* **title** - заголовок окна
* **overrideredirect** - указание оконному менеджеру игнорировать это окно. Аргументом является True или False. В случае, если аргумент не указан - получаем текущее значение. Если аргумент равен True, то такое окно будет показано оконным менеджером без обрамления (без заголовка и бордюра). Может быть использовано, например, для создания splashscreen при старте программы.
* **iconify / deiconify** - свернуть / развернуть окно
* **withdraw** - "спрятать" (сделать невидимым) окно. Для того, чтобы снова показать его, надо использовать метод //deiconify//.
* **minsize** и **maxsize** - минимальный / максимальный размер окна. Методы принимают два аргумента - ширина и высота окна. Если аргументы не указаны - возвращают текущее значение.
* **state** - получить текущее значение состояния окна. Может возвращать следующие значения: normal (нормальное состояние), icon (показано в виде иконки), iconic (свёрнуто), withdrawn (не показано), zoomed (развёрнуто на полный экран, только для Windows и Mac OS X)
* **resizable** - может ли пользователь изменять размер окна. Принимает два аргумента - возможность изменения размера по горизонтали и по вертикали. Без аргументов возвращает текущее значение.
* **geometry** - устанавливает геометрию окна в формате ширинаxвысота+x+y (пример: geometry("600x400+40+80") - поместить окно в точку с координатам 40,80 и установить размер в 600×400). Размер или координаты могут быть опущены (geometry("600x400") - только изменить размер, geometry("+40+80") - только переместить окно).
* **transient** - сделать окно зависимым от другого окна, указанного в аргументе. Будет сворачиваться вместе с указанным окном. Без аргументов возвращает текущее значение.
* **protocol** - получает два аргумента: название события и функцию, которая будет вызываться при наступлении указанного события. События могут называться WM_TAKE_FOCUS (получение фокуса), WM_SAVE_YOURSELF (необходимо сохраниться, в настоящий момент является устаревшим), WM_DELETE_WINDOW (удаление окна).
* **tkraise** (синоним lift) и **lower** - поднимает (размещает поверх всех других окон) или опускает окно. Методы могут принимать один необязательный аргумент: над/под каким окном разместить текущее.
* **grab_set** - устанавливает фокус на окно, даже при наличии открытых других окон
* **grab_release** - снимает монопольное владение фокусом ввода с окна
Эти же методы могут быть использованы для корневого (root) окна.
====Примеры====
from tkinter import *
def setGeometry(win, winx, winy):#Функция выравнивает окно по центру
x = (root.winfo_screenwidth() / 2 - winx / 2)
y = (root.winfo_screenheight() / 2 - winy / 2)
win.geometry("%dx%d+%d+%d" % (winx, winy, x, y))
def open_win():
win = Toplevel()
setGeometry(win, 200, 100)
#Растянуть на все окно
l = Label(win, text="Hello from top level", bg="#000000", fg="#fff").pack(expand=1, fill=BOTH)
win.overrideredirect(1)#Убрать рамку
win.grab_set() #Закрыть доступ родительскому окну
win.after(3000, lambda: win.destroy())#Окно закроется через три секунды
root = Tk()
setGeometry(root, 400, 300)
Button(root, text="Open", command=open_win, padx=20, pady=5).place(relx=0.5, rely=0.5, anchor=CENTER)
root.mainloop()
{{ :python:оконное_приложение:tkinter:toplevel1.png?300 |}}
from tkinter import *
def window_deleted():
print('Окно закрыто')
root.quit() # явное указание на выход из программы
root=Tk()
root.title(u'Пример приложения')
root.geometry('500x400+300+200') # ширина=500, высота=400, x=300, y=200
root.protocol('WM_DELETE_WINDOW', window_deleted) # обработчик закрытия окна
root.resizable(True, False) # размер окна может быть изменён только по горизонтали
root.mainloop()
Окно закрыто