2013-10-15 33 views
1

我的主要wxPython应用程序wx.Frame目前充满了按钮和文本字段以及主应用程序显示区域。所有事件处理程序和UI代码都包含在将命令传递给Control类的MainFrame类中。如何将wxPython控件移动到另一个框架

我想将这些控件中的一些从MainFrame移动到可以隐藏的新的SecondaryFrame。我创建了一个SecondaryFrame的实例,然后使用一个菜单项来显示和隐藏它。

我似乎有两个选择执行:

  1. 所有控制的移动创建和处理程序代码到SecondaryFrame类。
  2. 创建一个空白SecondaryFrame并从大型机中留下全部到位的处理程序,使主机的控制成员,而不是SecondaryFrame
  3. 两个

是的组合来填充它看起来像所有的这些这些选项需要对代码进行重要的重构。我错过了一个更明显的方式将已经有功能的控件移动到新的框架中吗?

回答

1

每个框架都需要有自己的小部件。如果你希望两个框架出于某种原因具有相同的控件,那么我会创建一个基类框架,并让其他两个框架继承它。

处理程序代码本身可以保存在控制器模块中。然后,你会进口控制器和做这样的事情:

mySecondaryFramesBtn.Bind(wx.EVT_BUTTON, controller.btnHandler) 

可以绑定在第一帧和第二帧相同的处理程序的按钮的方式,可以这么说。

你也可以看看model-view-controller的概念。您可以通过以下链接阅读更多关于它:

+0

该项目主要是MVC。我确实有一个控制器类,但是我试图保持GUI不可知。所有的事件处理程序和GUI相关的控制代码都在MainFrame类中。 – Mike

+1

处理程序与控件不同的类中的问题是,某些处理程序需要访问控件本身,例如在文本控件和复选框的情况下。我没有看到一种干净的方式让一个类中的处理程序从另一个类中的控件中获取数据。它可以工作,但它感觉马虎。 – Mike

+0

我不知道你想在帧之间传递数据。就我个人而言,我使用pubsub。它使得类之间的传递数据非常容易。 –

相关问题