Глава 17 · Проект: «Крестики-нолики»

Привязка событий — делаем приложения динамическими!

command — не единственный способ реагировать на действия пользователя: bind() открывает доступ к событиям любого рода.

В главе 16 кнопки реагировали на клик через параметр command — это самый частый, но не единственный способ связать код с действием пользователя. Привязка событий (.bind()) позволяет реагировать на что угодно: нажатие клавиши, движение мыши, наведение курсора.

privyazka_sobytij.py
import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="Нажмите любую клавишу", font=("Arial", 14))
label.pack(padx=20, pady=20)

def na_klavishu(event):
    label.config(text=f"Вы нажали: {event.keysym}")

root.bind("<Key>", na_klavishu)
root.mainloop()

Когда callback зарегистрирован через .bind(), Tkinter передаёт ему объект Event с подробностями о произошедшем событии: какая клавиша нажата (event.keysym), где кликнула мышь, и так далее. Это правило именно для .bind(): коллбэк, переданный в command= (как в главе 16), обычно вызывается без объекта Event — раздел 17.8 разберёт разницу подробнее.

Пригодится в главе 19
Та же идея — связать клавишу с функцией — вернётся в главе 19: змейка будет реагировать на нажатия клавиш со стрелками. У Turtle для этого есть свой, более простой интерфейс — screen.listen() и screen.onkeypress(), — но принцип тот же самый.
Практика: привязка событий клавиатуры
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →