python - 访问嵌套小部件的方法

标签 python model-view-controller user-interface design-patterns oop

我正在努力根据 mvc 优化我的设计,旨在简化 View 的 api,尽管 Iv 构建了复合小部件(具有自己的事件和/pubsub 消息),但它是非常嵌套的尝试简化事情。

例如,我有一个主要的顶级 gui 类 wxFrame,它有许多小部件,包括笔记本,笔记本包含许多选项卡,其中一些是包含复合小部件的笔记本。因此,要从 Controller 调用这些复合小部件之一的方法,我需要

 self.gui.nb.sub_nb.composite_widget.method()

为了为 View 创建合适的抽象,我在 View 中创建了对这些小部件(其方法需要在 Controller 中调用)的引用,如下所示

 self.composite_widget = self.nb.sub_nb.composite_widget()

因此,在 Controller 中,调用现在简化为

 self.gui.composite_widget.method()

这是为 GUI 创建抽象层的可接受的方法吗?

最佳答案

这绝对是解决问题的一种方法。不过,我倾向于使用 pubsub 来以老式方式调用方法。有些人比 pubsub 更喜欢 pyDispatcher。使用多点方法调用的主要问题是,如果必须更改方法名称,则很难调试。

关于python - 访问嵌套小部件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352521/

相关文章:

python - 如何在 pandas resample().mean() 和 resample().sum() 时禁用 nans 计算?

python - Django 完整性错误

python - Scikit-learn安装: "ImportError: No module named sklearn"

javascript - 如何在初始页面加载时禁用 Backbone.js 路由

python - 如何在不同的Qt线程中调用GUI元素?

python - 如何从 Mac 连接到蓝牙 4.0/蓝牙 LE 设备?

javascript - 正则表达式和 Handlebars

node.js - Express.js 项目中在哪里进行验证 – 数据库层验证(re. Mongoose)?

python - ListCtrl 中的自定义 header 组织或 wxPython 中的另一个小部件

java - 重新排序滚动 Pane 中的面板