Tkinter — правильно всё настраиваем!
Первое настоящее оконное приложение — и переход от последовательного выполнения к событийной модели.
До сих пор все программы либо выводили текст в терминал (главы 1–5, 8–15), либо рисовали
на холсте Turtle (главы 6–7, 12). Терминальная программа выполняется строка за
строкой: она делает шаг, ждёт ввода через input(), делает
следующий шаг — управление всегда у программы. Оконное приложение устроено иначе: оно строит
интерфейс один раз, а дальше ждёт действий пользователя и реагирует на них в
произвольном порядке — пользователь может нажать любую кнопку, ввести текст в любое поле,
изменить размер окна. Это называется событийно-ориентированным программированием
(event-driven programming), и подробно мы разберём эту модель в разделах 16.9–16.10.
Модуль для оконных приложений называется tkinter — это интерфейс
Python к графической библиотеке Tcl/Tk, и, как и turtle, он входит в
стандартную поставку Python:
Проверка: доступен ли Tkinter?
Не каждая установка Python обязательно имеет рабочее окружение Tk. Быстрая диагностика:
python -m tkinter
Если Tkinter и Tk доступны — появится маленькое тестовое окно. Если появляется ошибка импорта или окно не открывается — с локальной установкой Python/Tk нужно разобраться отдельно (в проверенных инструкциях для вашей ОС), прежде чем продолжать эту главу.
Первое окно
import tkinter as tk
root = tk.Tk()
root.title("Моё первое приложение")
root.mainloop() # запускает цикл обработки событий
tk.Tk() создаёт главное окно приложения — примерно как
turtle.Screen() создавал холст для рисования. Это прямая связь с
главой 14: результат tk.Tk() — обычный Python-объект со своими
методами.
root («корень») — это не обязательное правило языка, а широко принятое соглашение, которое вы увидите почти в любом примере с Tkinter.Tk() на весь процесс. Для дополнительных окон (настройки, диалоги) используется tk.Toplevel(...) (раздел 16.20), а не второй Tk().mainloop() — не «замирание», а цикл обработки событий
root.mainloop() запускает цикл, который активно обрабатывает
события: клики, ввод текста, изменение размера окна. Программа не «зависает» и не «засыпает» —
она ждёт и реагирует, оставаясь отзывчивой, пока не будет закрыта. Подробно разберём это
в разделе 16.10.