Вступление в Pubsub — wxPython #7

автор

Несколько лет назад я написал туториал для wxPython 2.8. и его встроенного Pubsub модуля, который вы можете прочесть в моём блоге. Тогда же, новое API для Pubsub было добавлено в wxPython 2.8.11.0. Запустить его можно было с помощью этого кода:

Старый способ импорта Pubsub выглядел так:

Теперь в версии wxPython 2.9 и новее, он выглядит так:

Зачем я упоминаю всё это? Поскольку в интернете ещё можно встретить туториалы для wxPython 2.8, эта информация может оказаться полезной, а также есть люди, которые по каким-то причинам не хотят переходить на более новую версию.

Модуль Pubsub в wxPython также распространяется и отдельно, так что вы можете без проблем добавить его к вашим собственным приложениям Python. Проще говоря, пакет Pubsub позволяет вам писать программы, которые следуют модели Publish/Subscribe. Основная идея в том, чтобы создать одного или несколько слушателей, известных также как подписчики. У подписчиков будет отображаться сообщение, которое вы распространяете через паблишер.

Текущая версия Pubsub API

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

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

Метод myListener принимает один или несколько аргументов. В данном случае, мы настраиваем его таким образом, чтобы он всегда требовал один аргумент (сообщение) и опциональный аргумент (arg2). Затем мы переходим к классу OtherFrame, где нам нужно обратить внимание на метод onSendAndClose. В данном методе, вы можете увидеть, что он отправляет 2 сообщения:

Первый отправляет только требуемую информацию, в то время как второй отправляет оба аргумента. Вы заметите, что новое API требует явные аргументы с ключевыми словами. Если вы измените первую команду sendMessage на pub.sendMessage(“panelListener”, msg), то вы получите исключение TypeError.

Итоги

Сейчас вы уже ознакомились с азами использования Pubsub в ваших wxPython приложениях. Я хочу обратить внимание на то, что Pubsub не обладает потоковой безопасностью, так что имейте это в виду. Если вы применяете Pubsub в потоке, вам нужно будет использовать метод, обладающий потоковой безопасностью, такой как wx.CallAfter или wx.PostEvent, так как они позволят отправлять сообщения вашим слушателям, исключая вероятность появления в вашем коде странных ошибок. Я использую Pubsub во многих своих программах и считаю его достаточно полезным.

Вам может быть интересно

Scroll Up