Python MVC 仅适用于 wx gui——如果不是,那又如何?
Python MVC just for wx gui -- if not it, then what?
我一直在花时间重组项目 gui。最初,我有一个包含 "makeConfigWindow" 和 "makeMainWindow" 等函数的文件,他们竭尽全力制作 windows。问题在于它的耦合度非常高,而且非常具体,可重用的代码无处可用于类似的任务。我决定尝试仅使用 gui 部分的 MVC,因此我在一个界面文件中制作了模型 class、视图 class 和控制器 class。每个 wx.App 每个实例一个(视图除外,每个新帧都是一个新实例)。
我现在 运行 遇到的问题是我似乎在重新发明轮子。我的模型只是从配置文件中获取信息,并在请求时将其吐出,但通过直接引用配置文件,此功能已经存在。该视图是 wx.Frame 的子 class,最终有一堆函数,例如控制器调用的 "changeBgColor(panel, color)"——问题是控制器可以简单地调用这些函数来自 wx 而不是 View 中间人的功能。现在,控制器最终看起来与我原来的 "makeMainWindow" 功能一样具体。
看起来 MVC 框架已经存在了——配置是模型,wxPython 本身是视图,巨大的命令后命令脚本是控制器。正确吗?
我的问题是:如果不是这样,那么我应该如何构建我的图形用户界面?我最大的问题是 gui 最终包含了所有东西,对象,引用,所有东西,因为 Mainloop 是最后唯一的东西 运行,减去一些执行系统检查等的线程,然后它们将事件抛给gui.
大多数时候,我使用 wxPython 代码作为我的视图。如果事件处理程序需要加载配置或访问数据库,则它会使用控制器来执行此操作。我的模型通常与数据库相关(或用于 ObjectListView)。 wxPython 代码应该只做与 wxPython 相关的事情。
这意味着如果你有任何东西可以在 wx 之外做任何事情,那么它可能会进入模型或控制器。控制器示例:
- 解析 csv 文件
- 开始一个线程
- 运行 数据库查询
以下文章可能对您有所帮助:
- http://wiki.wxpython.org/ModelViewController
- http://www.blog.pythonlibrary.org/2011/11/10/wxpython-and-sqlalchemy-an-intro-to-mvc-and-crud/
- http://www.blog.pythonlibrary.org/2011/11/30/improving-medialocker-wxpython-sqlalchemy-and-mvc/
- http://pyvideo.org/video/288/pycon-2010--wxpython-ii--introduction-to-gui-prog
我一直在花时间重组项目 gui。最初,我有一个包含 "makeConfigWindow" 和 "makeMainWindow" 等函数的文件,他们竭尽全力制作 windows。问题在于它的耦合度非常高,而且非常具体,可重用的代码无处可用于类似的任务。我决定尝试仅使用 gui 部分的 MVC,因此我在一个界面文件中制作了模型 class、视图 class 和控制器 class。每个 wx.App 每个实例一个(视图除外,每个新帧都是一个新实例)。
我现在 运行 遇到的问题是我似乎在重新发明轮子。我的模型只是从配置文件中获取信息,并在请求时将其吐出,但通过直接引用配置文件,此功能已经存在。该视图是 wx.Frame 的子 class,最终有一堆函数,例如控制器调用的 "changeBgColor(panel, color)"——问题是控制器可以简单地调用这些函数来自 wx 而不是 View 中间人的功能。现在,控制器最终看起来与我原来的 "makeMainWindow" 功能一样具体。
看起来 MVC 框架已经存在了——配置是模型,wxPython 本身是视图,巨大的命令后命令脚本是控制器。正确吗?
我的问题是:如果不是这样,那么我应该如何构建我的图形用户界面?我最大的问题是 gui 最终包含了所有东西,对象,引用,所有东西,因为 Mainloop 是最后唯一的东西 运行,减去一些执行系统检查等的线程,然后它们将事件抛给gui.
大多数时候,我使用 wxPython 代码作为我的视图。如果事件处理程序需要加载配置或访问数据库,则它会使用控制器来执行此操作。我的模型通常与数据库相关(或用于 ObjectListView)。 wxPython 代码应该只做与 wxPython 相关的事情。
这意味着如果你有任何东西可以在 wx 之外做任何事情,那么它可能会进入模型或控制器。控制器示例:
- 解析 csv 文件
- 开始一个线程
- 运行 数据库查询
以下文章可能对您有所帮助:
- http://wiki.wxpython.org/ModelViewController
- http://www.blog.pythonlibrary.org/2011/11/10/wxpython-and-sqlalchemy-an-intro-to-mvc-and-crud/
- http://www.blog.pythonlibrary.org/2011/11/30/improving-medialocker-wxpython-sqlalchemy-and-mvc/
- http://pyvideo.org/video/288/pycon-2010--wxpython-ii--introduction-to-gui-prog