wxFormBuilder with Python:从子类访问FlexGridSizer

时间:2013-08-28 22:22:20

标签: python class inheritance wxwidgets wxformbuilder

我正在wxFormBuilder中构建一个GUI,并在Python中为它编写代码。

我注意到我构建的所有小部件都在生成的代码中分配给self。例如,具有单个文本的GUI可能如下所示:

class MyFrame(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self,parent)
        self.myStaticText = wx.StaticText(self,wx.ID_ANY,'My Text',0)

因此对象myStaticText成为MyFrame类的属性。这很好,因为我可以编写一个继承此类的新类,然后执行其他功能,例如更新myStaticText对象:

import MyFrmae
class GUI(MyFrame):
    def __init_(self,parent):
        MyFrame.__init__(self,parent)

    def updateText(self):
        self.staticText.SetLabel('My Other Text')

问题是wxFormBuilder不会在任何FlexGridSizer对象前面附加self。因此生成的代码如下所示:

myFlexGridSizer = wx.FlexGridSizer(3,1,0,0)

而不是:

self.myFlexGridSizer = wx.FlexGridSizer(3,1,0,0)

因此,我无法从任何其他类访问该对象,我真的需要这样做。

因此...

  1. 如果对象前面没有self,有没有办法从另一个类访问对象,即使我直接继承它?
  2. 有没有办法更改wxFormBuilder中的设置,以便它附加self

1 个答案:

答案 0 :(得分:1)

如果我理解你想要访问表单构建器生成的FlexGridSizer

我从未使用wxFormBuilder,但我认为它的意思是它创建了一个wxFlexGridSizer,操纵它以便进行表单的布局,然后调用SetSizer在你的wxWindow(或你的情况下为wxFrame)并忘记它,因为布局不会再改变了。

一个简单的选择(但不是最好的选择)是在您的框架上调用GetSizer,然后您可以从那里访问wxSizer

另一个选项是在MyFrame中有一个特定的sizer成员,您可以在其中存储wxFlexGridSizer,但这可能涉及更改wxFormBuilder