wxPython:向多个控件发送信号

1 投票
2 回答
907 浏览
提问于 2025-04-15 21:03

我甚至不知道该怎么问这个问题。我想要一个类似于wxPython事件系统的东西,但又有点不同。我会尽量解释清楚。

当我的程序中发生某种变化(比如说“树的变化”,具体是什么就不说了),我想给我程序里的所有小部件发送一个信号,通知它们“树的变化”发生了,它们应该根据这个变化来更新自己的显示。

我该怎么做呢?这听起来有点像wxPython的事件,但又不完全一样,因为我知道事件并不会传播到所有的小部件。

有什么好的方法可以做到这一点吗?

2 个回答

0

看看观察者设计模式吧。你需要把小部件(widgets)当作观察者来实现,而信号发送者则是主题(subject)。这样每当主题发送信号时,所有的观察者都会收到通知。

想了解更多关于观察者的信息,可以看看这个链接

6

你可以自己写一个发布-订阅机制,这个机制可以简单到像这样:

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

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

任何想要监听事件的人都可以在一个中心注册自己的函数,然后你就可以向感兴趣的人发出事件。你还可以进一步改进,比如让他们注册特定的事件、支持多个注册者、取消注册、进行错误检查等等。

另外,你也可以使用wxPython的wx.lib.pubsub模块,或者其他一些Python库,比如PyPubsubPyDispatcher

撰写回答