混合使用 PyPubSub 和 wxPython 的内置 pubsub 模块

mixed use of PyPubSub and wxPython's built-in pubsub module

我有一个应用程序引擎,程序内通信是使用 PyPubSub 完成的。

计划是一个响应式的 GUI,例如enables/disables 基于模型状态的小部件。这将使用 wxPython 实现。

由于 wxPython 有一个跨 GUI 工作的自己的 pubsub 库(即 PyPubSub),问题是:如何维护 MVC 模型。

是否可以(更重要的是:它是否有意义)在保持 MVC 模式的同时混合使用这两种消息传递系统?例如。将这两个消息传递系统分开,同时使 GUI 具有引擎主题的订阅者?

或者我应该只在 GUI 中使用模型的(即应用程序引擎的)pubsub,而不使用 wxPython 内置的?

对于这个相当概念性的问题,我们将不胜感激。

总结(来自 pypubsub 的作者):如果你从 pypubsub 而不是 wx.lib.pubsub 导入,一切都会正常,你不会有 "two messaging systems"。

详情:

实际使用的wx包中没有什么wx.lib.pubsub;后者仍在 wx.lib 中只是出于遗留原因(见下文),是否要在 wxPython 应用程序中使用发布-订阅完全由您选择。

pypubsub/wx.lib.pubsub的历史:wx.lib.pubsub最初是为wxPython开发的模块,并包含在其源代码中。它作为一个名为 pypubsub 的独立库被移出(10 多年前!),因为 wxPython 中没有任何东西依赖它,反之亦然。为了向后兼容,wx.lib.pubsub 作为独立 pypubsub 的特定 "release" 保持活动状态(例如,wxPython 3 使用 pypubsub 3.3)。然而,最新的 wxPython (4.0.4) 已经弃用了它的 wx.lib.pubsub:您应该直接从 pip install 或 github 安装独立的 pypubsub,并使用 from pubsub import pub(而不是from wx.lib.pubsub import pub).

如果可以,你应该使用 wxPython 4.0.4、Python 3.7 和 pypubsub 4.0.0(4.0.1 即将推出并支持仅关键字参数) .