Глава 16 · Создаём классные приложения с Tkinter

Tkinter — правильно всё настраиваем!

Первое настоящее оконное приложение — и переход от последовательного выполнения к событийной модели.

До сих пор все программы либо выводили текст в терминал (главы 1–5, 8–15), либо рисовали на холсте Turtle (главы 6–7, 12). Терминальная программа выполняется строка за строкой: она делает шаг, ждёт ввода через input(), делает следующий шаг — управление всегда у программы. Оконное приложение устроено иначе: оно строит интерфейс один раз, а дальше ждёт действий пользователя и реагирует на них в произвольном порядке — пользователь может нажать любую кнопку, ввести текст в любое поле, изменить размер окна. Это называется событийно-ориентированным программированием (event-driven programming), и подробно мы разберём эту модель в разделах 16.9–16.10.

Модуль для оконных приложений называется tkinter — это интерфейс Python к графической библиотеке Tcl/Tk, и, как и turtle, он входит в стандартную поставку Python:

Ваш кодобъекты и методыPythontkinterмодуль стандартнойбиблиотекиTcl/TkGUI-инструментарийОкно ОСнативный интерфейс
tkinter — мост между Python и системным окружением окон, а не переизобретённый GUI с нуля.

Проверка: доступен ли Tkinter?

Не каждая установка Python обязательно имеет рабочее окружение Tk. Быстрая диагностика:

proverka_tkinter.py
python -m tkinter

Если Tkinter и Tk доступны — появится маленькое тестовое окно. Если появляется ошибка импорта или окно не открывается — с локальной установкой Python/Tk нужно разобраться отдельно (в проверенных инструкциях для вашей ОС), прежде чем продолжать эту главу.

Первое окно

pervoe_okno.py
import tkinter as tk

root = tk.Tk()
root.title("Моё первое приложение")

root.mainloop()   # запускает цикл обработки событий

tk.Tk() создаёт главное окно приложения — примерно как turtle.Screen() создавал холст для рисования. Это прямая связь с главой 14: результат tk.Tk() — обычный Python-объект со своими методами.

Tk (root)— (состояние окнахранится внутри)title(текст)geometry("ШxВ")minsize(w, h)configure(...)protocol(...)after(...)destroy()mainloop()
root — экземпляр Tk с собственными методами; это ООП главы 14 в реальной библиотеке.
root — распространённое соглашение об имени
Главное окно принято называть root («корень») — это не обязательное правило языка, а широко принятое соглашение, которое вы увидите почти в любом примере с Tkinter.
Обычно — один root на приложение
В обычном приложении создаётся один объект Tk() на весь процесс. Для дополнительных окон (настройки, диалоги) используется tk.Toplevel(...) (раздел 16.20), а не второй Tk().

mainloop() — не «замирание», а цикл обработки событий

root.mainloop() запускает цикл, который активно обрабатывает события: клики, ввод текста, изменение размера окна. Программа не «зависает» и не «засыпает» — она ждёт и реагирует, оставаясь отзывчивой, пока не будет закрыта. Подробно разберём это в разделе 16.10.

Практика: создаём первое окно
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →