Глава 16 · Создаём классные приложения с Tkinter
От терминала к GUI: событийная модель
Главный интеллектуальный переход этой главы: управление больше не течёт одной сплошной линией.
Терминал: последовательное выполнение
Терминальная программа выполняется предсказуемо, строка за строкой — управление всегда у самой программы:
GUI: событийно-ориентированное выполнение
Оконное приложение строит интерфейс один раз, а затем ждёт события — и на каждое реагирует отдельным, заранее зарегистрированным кусочком кода:
инициализация интерфейса
переход в цикл событий
↓mainloop()
пользователь нажал кнопку
↓событие: клик
вызывается связанная функция
↓callback выполняется
callback вернулся
↓снова ожидание
Источники событий
Откуда берутся события
Пользователь
клик мышью
ввод текста
действие с окном
Система
перерисовка
изменение размера окна
Программа
таймер / after() — раздел 16.22
Событие, callback, command — не синонимы
| Термин | Что это |
|---|---|
| Событие (event) | то, что произошло — клик, ввод, таймер |
| Callback | функция/вызываемый объект, зарегистрированный заранее для вызова позже |
| command | один из способов Tkinter связать callback с конкретным виджетом |
Регистрация callback — это ещё не его выполнение:
registraciya_vs_vypolnenie.py
log = []
def on_click():
log.append("clicked")
registered = on_click # регистрация: callback запомнен, но НЕ вызван
print(log) # []
registered() # диспетчеризация: callback выполняется именно сейчас
print(log) # ['clicked']
Это прямая связь с главой 13
Функция как объект, который можно передать и вызвать позже — ровно то же самое «функция без скобок», о котором шла речь в разделе 16.2 про
command. Событийная модель Tkinter целиком построена на этой идее.Практика: регистрация и диспетчеризация callback
Проверяется без tkinter — чистой логикой на функциях-объектах