python - 如何连贯地组织 PyGTK 桌面应用程序的模块?

标签 python gtk module pygtk organization

我正在使用 PyGTK 开发桌面应用程序,似乎遇到了文件组织的一些限制。到目前为止,我已经以这种方式构建了我的项目:

  • application.py - 包含主要应用程序类(大多数功能例程)
  • gui.py - 包含一个松散耦合的 GTK gui 实现。处理信号回调等。
  • command.py - 包含不依赖于应用程序类中数据的命令行自动化功能
  • state.py - 保存状态数据持久化类

到目前为止,这已经相当不错了,但此时 application.py 开始变得相当长。我看过许多其他 PyGTK 应用程序,它们似乎有类似的结构问题。在某个时刻,主要模块开始变得很长,并且没有明显的方法可以在不牺牲清晰度和面向对象的情况下将代码分解成更窄的模块。

我考虑过让 GUI 成为主要模块,并为工具栏例程、菜单例程等提供单独的模块,但到那时我相信我将失去 OOP 的大部分好处,并最终得到一个 everything-references -一切场景。

我应该只处理一个很长的中央模块,还是有更好的方法来构建项目,这样我就不必太依赖类浏览器了?

编辑我

好的,关于所有 MVC 内容的观点都已说明。我的代码中确实有一个 MVC 的粗略近似值,但诚然,我可能会通过进一步分离模型和 Controller 来获得一些好处。但是,我正在阅读 python-gtkmvc 的文档(顺便说一句,这是一个很好的发现,感谢您引用它),我的印象是它不会解决我的问题,只是将它形式化。我的应用程序是单个 glade 文件,通常是单个窗口。因此,无论我如何严格定义模块的 MVC 角色,我仍然会使用一个 Controller 模块来完成大部分工作,这几乎就是我现在所拥有的。诚然,我对正确的 MVC 实现有点模糊,我将继续研究,但在我看来,这种架构不会从我的主文件中获取更多内容,它只是要重命名它文件到 controller.py。

我是否应该为窗口的不同部分(工具栏、菜单等)考虑单独的 Controller / View 对?也许这就是我在这里所缺少的。这似乎是 S. Lott 在他的第二个要点中所指的。

感谢到目前为止的回复。

最佳答案

在项目中Wader我们使用 python gtkmvc ,这使得在使用 pygtk 和 glade 时更容易应用 MVC 模式,你可以在 svn repository 中看到我们项目的文件组织:

wader/
  cli/
  common/
  contrib/
  gtk/
    controllers/
    models/
    views/
  test/
  utils/

关于python - 如何连贯地组织 PyGTK 桌面应用程序的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216093/

相关文章:

module - 是否有可能有一个模块,部分可以在 crate 外部访问,部分只能在 crate 内部访问?

python - django 模型类是单例/仅实现一次吗?

python - Tensorflow.py protected 划分

php - 哪些程序用于构建与在线 php 和 mysql 交互的独立桌面小部件?

python - 动态调整图像大小 pyGTK (python)

gtk - 如何在 Linux 上使 gtkwindow 背景透明?

python - 如何在 gtk.TextBuffer 中等待用户输入暂停?

javascript - NW.js 未正确清除缓存

python - 使用 PyPy 作为 PyCharm 的解释器

javascript - 将变量传递给 vuejs 模块