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

时间:2010-03-30 16:21:09

标签: python events event-handling wxpython signals

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

当我的程序发生某些变化时(“树变化”,不要小心那是什么),我想向程序中的所有小部件发送信号,通知他们发生了“树变化” ,他们应该改变他们的显示作为回应。

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

这样做的好方法是什么?

2 个答案:

答案 0 :(得分:6)

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

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

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

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

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

答案 1 :(得分:0)

查看观察者的设计模式。 你需要以观察者的身份实现小部件。和信号发送者作为主题。所以只要主体发出信号,所有观察者都会收到通知。

check this out for more info about observers