Есть несколько случаев, когда вам нужно запустить серию хэндлеров событий. И если в ваших программах вы пока это не используете, то возьмите на заметку – это действительно прекрасная возможность. К счастью, с wxPython сделать это более чем просто.
Давайте взглянем на простой пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import wx class MyPanel(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent) btn = wx.Button(self, label="Press Me") btn.Bind(wx.EVT_BUTTON, self.HandlerOne) btn.Bind(wx.EVT_BUTTON, self.HandlerTwo) def HandlerOne(self, event): """""" print("handler one fired!") event.Skip() def HandlerTwo(self, event): """""" print("handler two fired!") event.Skip() class MyFrame(wx.Frame): """""" def __init__(self): """Constructor""" wx.Frame.__init__(self, None, title="Test") panel = MyPanel(self) self.Show() if __name__ == "__main__": app = wx.App(False) frame = MyFrame() app.MainLoop() |
Как вы видите, всё, что нужно сделать – вызвать метод виджета Bind() дважды и запустить то же событие, но для разных хэндлеров. Следующим ключевым фрагментов является тот, в котором вы используете event.Skip(). Пропуск заставит wxPython найти другие хэндлеры, которые могут понадобиться для работы с этим событием. События пройдут по иерархии до пэрентов, пока не найдут себе применения, или же ничего не произойдёт. Книга Робина Дана, которая называется «wxPython в действии» объясняет данную концепцию очень доходчиво.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Итоги
Так как данная статья достаточно коротка, она демонстрирует лишь одну из множества мощных возможность набора инструментов графического интерфейса wxPython. Возможность является привязкой одного и того же виджета к несколькими хэнлерам событий. Вам это может пригодится в случаях, когда нужно сохранить какую-либо информацию в базе данных, при этом вызывая какой-то длительный процесс. Но это так, лишь пример. Уже через несколько минут, как мне кажется, у вас должна появится мысль относительно того, как применить данный сценарий в ваших собственных проектах, или же найти ему другое полезное применение.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»