Глава 17 · События глубже

command vs bind — что выбирать

Не «bind существует, значит используем его везде» — у каждого инструмента своя работа.

command= или bind() — как выбирать

Что выбрать?
Нужно выполнить основное действие Button
command=
Нужны координаты движения мыши
bind("<Motion>", ...)
Нужно знать, какая именно клавиша нажата
bind("<Key>", ...)
Нужна реакция на наведение курсора (без клика)
bind("<Enter>"/"<Leave>", ...)
Виджет вообще не предоставляет command (например, Label, Frame)
bind()
Не заменяйте Button.command на bind('<Button-1>', ...) по умолчанию
Это профессиональное правило. command= у Button — семантическая активация: она описывает основное действие кнопки, а встроенное поведение класса Button решает, какие способы активации вызывают эту команду. Конкретные клавиши могут отличаться у tk.Button и ttk.Button, а также между платформами и темами. Голая привязка <Button-1> описывает только конкретное событие мыши и обходит семантическое действие виджета. Замена command на bind «просто потому что можно» — типичная архитектурная ошибка, не стилистическая мелочь.

Как это распределится в игре

Три задачи — три разных инструмента
Ход по клетке
command= у Button
основное действие виджета
Наведение — превью
bind(<Enter>/<Leave>)
нет готового command для этого
Клавиши 1–9 / R
bind(<Key>) на root
не привязано к одному виджету
Практика: command vs bind — что выбрать
Автоматическая проверка — для набора сценариев выбираем правильный инструмент
Открыть практику →