Прикрепляем несколько виджетов к одному хэндлэру — wxPython #17

Иногда вам нужно, чтобы несколько кнопок вызывали один и тот же хэндлер событий. Обычно это происходит если у вас в программе несколько кнопок со схожими задачами. В некоторых случаях стоит привязать и кнопку закрытия окна, и итем закрытия окна в меню к одному и тому же хэндлеру событий, чтобы не писать разные фрагменты кода для выполнения одинаковых задач. Для этого нужно ознакомиться с принципом Don’t Repeat Yourself (DRY), что переводится как «Не повторяй себя».

Приступая к работе

Прикрепляем несколько виджетов к одному хэндлэру -  wxPython #17

Для начала напишем код, содержащий несколько кнопок. Я продемонстрирую вам пример, отображающий два разных способа того, как добиться от кнопки выполнения поставленной задачи, так что вы научитесь универсальному применению метода. Вот код, которого вы так сильно ждали:

Сначала мы создаём 3 объекта кнопок. Чтобы избавится от лишней суеты, мы сразу помещаем их в список, а затем повторяем внутри списка, чтобы добавить кнопки в сайзер и привязать их к хэндлеру событий. Это отличный способ сокращения скопированного и вставленного кода, ведь так он выглядит чище и в нём проще искать баги. Иногда люди на этом не останавливаются и применяют сложные продуманные вспомогательные методы вроде buildButtons, ведь он может работать со многими виджетами, что делает программирование более гибким.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Часть, на которую нам стоит обратить внимание – это сам хэндлер событий. Самый простой способ поместить виджет в хэндлер событий называется методом GetEventObject. Он вернёт виджет и вы сможете делать всё, что захотите. Некоторые люди меняют значение или ярлык виджета, другие используют ID виджета или уникальное имя и добавляют различные условные структуры, которые запускают определённое действие при нажатии кнопки. То есть функциональность полностью зависит исключительно от вас.

Второй способ получить виджет – двухэтапный процесс, в рамках которого нам нужно сначала извлечь ID из события используя метод GetID(). Затем же мы передаём результаты в наш объект фрейма, используя метод FindWindowById() и мы снова have the widget in question

Итоги

Теперь вы знакомы с «секретом» прикрепления нескольких виджетов к одному и тому же хэндлеру событий. Всё, что вам нужно знать: если вы пишите 2 функции, выполняющие одну и ту же задачу, или копируете и вставляете функцию, совершая лишь минимальные изменения, вам нужно провести рефакторинг вашего кода, чтобы избежать проблем в будущем.