wxPython:向几个小部件发送信号

Ram*_*hum 1 python events signals wxpython event-handling

我甚至不确定如何提出这个问题.我想要的东西就像wxPython事件系统,但有点不同.我会试着解释一下.

当我的程序发生了某些变化时("树变化",不管那是什么),我想向程序中的所有小部件发送一个信号,通知他们发生了"树木变化",并且应该改变他们的显示作为回应.

我该怎么做呢?听起来有点像wxPython事件,但事实并非如此,因为据我所知,事件并没有传播到所有小部件.

这样做有什么好办法?

Anu*_*yal 6

您可以编写自己的发布 - 订阅机制,这可以像这样简单:

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

def emit(self, eventName):
    for callback in self.callbacks:
         callback(eventName)
Run Code Online (Sandbox Code Playgroud)

任何有兴趣听取事件的人都会注册一个具有中央注册表的功能,然后你可以向感兴趣的各方发出一个事件,你可以通过注册一个特定的事件,拥有多个注册商,注册,错误检查等来进一步改进它.

或者你可以使用wxPython的wx.lib.pubsub模块或其他python库,如PyPubsub,PyDispatcher