0

我正在 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 没有self在任何 FlexGridSizer 对象前面附加 a 。所以生成的代码如下:

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

代替:

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

结果,我无法从任何其他类访问该对象,而我确实需要这样做。

所以...

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

1 回答 1

1

如果我理解得很好,您想访问FlexGridSizer表单生成器生成的?

我从未使用过,wxFormBuilder但我认为这个想法是它创建一个wxFlexGridSizer,操纵它以进行表单的布局,并调用SetSizer您的wxWindow(或wxFrame在您的情况下)并忘记它,因为布局不是将要改变了。

一个简单的选择(但这不是最好的)是调用GetSizer你的框架,你可以wxSizer从那里访问一个。

另一种选择是在您的 MyFrame 中有一个特定sizer成员,您将在其中存储wxFlexGridSizer,但它可能涉及更改由wxFormBuilder

于 2013-08-29T07:49:42.180 回答