我正在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)
因此,我无法从任何其他类访问该对象,我真的需要这样做。
因此...
self
,有没有办法从另一个类访问对象,即使我直接继承它?self
?答案 0 :(得分:1)
如果我理解你想要访问表单构建器生成的FlexGridSizer
?
我从未使用wxFormBuilder
,但我认为它的意思是它创建了一个wxFlexGridSizer
,操纵它以便进行表单的布局,然后调用SetSizer
在你的wxWindow
(或你的情况下为wxFrame
)并忘记它,因为布局不会再改变了。
一个简单的选择(但不是最好的选择)是在您的框架上调用GetSizer
,然后您可以从那里访问wxSizer
。
另一个选项是在MyFrame中有一个特定的sizer
成员,您可以在其中存储wxFlexGridSizer
,但这可能涉及更改wxFormBuilder