Python 从wx框架类调用应用程序方法

Python 从wx框架类调用应用程序方法,python,wxpython,wxwidgets,model-view-controller,project-organization,Python,Wxpython,Wxwidgets,Model View Controller,Project Organization,我从wxPython开始,一直在努力学习我能掌握的每一个教程和示例。然而,我遇到了一个小问题,它与wx.App和wx.Frame有关,而wx.Frame应该包含特定的方法。几乎我所看到的每个例子都没有超出布局/大小器和事件处理的范围,没有一个真正涉及wxPython项目的项目组织 例如,我有一个获取文件夹列表的方法。大多数示例处理此问题的方法是将方法正确地粘贴到frame类中。此方法有可能用于应用程序的其他几个部分,因此将其存储在应用程序类级别更有意义 我应该如何组织和调用这样的通用方法,这样我

我从wxPython开始,一直在努力学习我能掌握的每一个教程和示例。然而,我遇到了一个小问题,它与wx.App和wx.Frame有关,而wx.Frame应该包含特定的方法。几乎我所看到的每个例子都没有超出布局/大小器和事件处理的范围,没有一个真正涉及wxPython项目的项目组织

例如,我有一个获取文件夹列表的方法。大多数示例处理此问题的方法是将方法正确地粘贴到frame类中。此方法有可能用于应用程序的其他几个部分,因此将其存储在应用程序类级别更有意义

我应该如何组织和调用这样的通用方法,这样我就不会把框架类弄得乱七八糟了

更新:

为了澄清,文件夹列表只是一个例子,我的实际方法做了很多工作。我想说的是,我的代码不是特定于帧的。如果我在应用程序类中有这个,那么从框架中的事件方法调用它的最佳方式是什么


我在寻找实际的项目组织技术,而不是编程基础。

在适当的OOP设计中,这将是独立的或文件系统类的一部分-它不会是应用程序或框架的一部分。

在适当的OOP设计中,这将是独立的或文件系统类的一部分-它不会是应用程序或框架的一部分。

正如Mark所述,您应该创建一个新类来处理类似的事情


当使用类似wxWidgets的东西时,理想的代码布局是模型视图控制器,其中wxFrame类只有显示项目所需的代码,所有逻辑和业务规则都由与wxFrame交互的其他类处理。通过这种方式,您可以更改逻辑和业务规则,而无需更改接口,也可以更改或交换接口,而无需更改逻辑和业务规则。

正如Mark所述,您应该创建一个新类来处理类似的事情


当使用类似wxWidgets的东西时,理想的代码布局是模型视图控制器,其中wxFrame类只有显示项目所需的代码,所有逻辑和业务规则都由与wxFrame交互的其他类处理。通过这种方式,您可以在不必更改接口的情况下更改逻辑和业务规则,也可以在不必更改逻辑和业务规则的情况下更改或交换接口。

从wxWidgets/wxPython数据类型继承的类不应实现任何业务逻辑。wxWidgets是一个GUI库,因此wxApp或wxFrame的任何子类都应该关注GUI,即显示界面和响应用户操作

做一些有用的事情的代码应该与wx分开,因为您可以稍后决定在某些web或控制台应用程序中使用它,在这种情况下您不想创建wxApp对象。您也可以稍后决定将一些计算移动到单独的“工作线程”,而您的GUI将是“主线程”——响应,并在长时间的计算期间正确地重新绘制

最后但并非最不重要的一点——封装逻辑的类可能会在项目生命周期中增长。如果它们与您的GUI类混合在一起,它们将增长得更快,最终它们变得如此复杂,以至于您几乎无法调试它们


当您不将逻辑中的bug与GUI刷新/布局/进度条等中的bug混合在一起时,将它们分开会导致干净的代码。。这种方法还有一个很好的特性——能够在GUI人员和逻辑人员之间分割工作,这样他们的工作不会经常发生冲突。

继承自wxWidgets/wxPython数据类型的类不应该实现任何业务逻辑。wxWidgets是一个GUI库,因此wxApp或wxFrame的任何子类都应该关注GUI,即显示界面和响应用户操作

做一些有用的事情的代码应该与wx分开,因为您可以稍后决定在某些web或控制台应用程序中使用它,在这种情况下您不想创建wxApp对象。您也可以稍后决定将一些计算移动到单独的“工作线程”,而您的GUI将是“主线程”——响应,并在长时间的计算期间正确地重新绘制

最后但并非最不重要的一点——封装逻辑的类可能会在项目生命周期中增长。如果它们与您的GUI类混合在一起,它们将增长得更快,最终它们变得如此复杂,以至于您几乎无法调试它们

当您不将逻辑中的bug与GUI刷新/布局/进度条等中的bug混合在一起时,将它们分开会导致干净的代码。。这种方法还有一个很好的特性——能够在GUI人员和逻辑人员之间分割工作,这可以在没有c语言的情况下完成他们的工作
持续的冲突。

我可能从一开始就应该更清楚,但我找到了我想要的:


在wxpythonwiki中,我找到了几个简单、具体的MVC项目示例。

我可能从一开始就应该更清楚,但我找到了我想要的:


在wxpython wiki中,我找到了几个简单、具体的MVC项目示例。

如果您确实在学习冒险,并且没有时间紧迫,那么您可以浏览Audacity应用程序的源代码。这是一个非常成功的、非基本的、非平凡的应用程序,它碰巧是开源的,并且使用wxWidgets。如果您确实正在进行学习冒险,并且没有时间紧迫,那么您可以浏览Audacity应用程序的源代码。这是一个非常成功的、非基本的、非平凡的应用程序,它碰巧是开源的,并且使用wxWidgets。