wxPython: отправка сигнала нескольким виджетам - PullRequest
1 голос
/ 30 марта 2010

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

Когда в моей программе происходит определенное изменение («изменение дерева», не говоря уже о том, что это такое), я хочу послать сигнал всем виджетам в моей программе, уведомив их, что произошло «изменение дерева» и они должны изменить свое отображение в ответ.

Как мне это сделать? Это немного похоже на события wxPython, но не совсем, поскольку, насколько я знаю, события не распространяются на все виджеты.

Что было бы хорошим способом сделать это?

Ответы [ 2 ]

6 голосов
/ 31 марта 2010

Вы можете написать свой собственный механизм публикации-подписки, который может быть таким простым:

def register(self, callback):
    self.callbacks.append(callback)

def emit(self, eventName):
    for callback in self.callbacks:
         callback(eventName)

Любой, кто заинтересован в прослушивании события, регистрирует функцию в центральном реестре, и затем вы можете отправлять событие заинтересованным сторонам, вы можете улучшить его, зарегистрировавшись для определенного события, имея несколько регистраторов, отмените регистрацию, проверьте ошибки и т. Д.

В качестве альтернативы вы можете использовать модуль wxPython wx.lib.pubsub или другие библиотеки Python, такие как PyPubsub , PyDispatcher

0 голосов
/ 01 апреля 2010

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

проверьте это для получения дополнительной информации о наблюдателях

...