我正在用wxFormBuilder构建一个图形用户界面,并用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
发布于 2013-08-28 23:49:42
如果我很清楚,您想要访问表单生成器生成的FlexGridSizer
?
我从未使用过wxFormBuilder
,但我认为它的思想是创建一个wxFlexGridSizer
,操纵它以完成表单的布局,并在wxWindow
上调用SetSizer
(或者在您的例子中是wxFrame
),然后忘记它,因为布局不会再改变了。
一个简单的选择(但这不是最好的)是在您的帧上调用GetSizer
,然后您可以从那里访问一个wxSizer
。
另一个选择是在您的sizer
中有一个特定的MyFrame成员,您将在其中存储wxFlexGridSizer
,但这可能涉及更改由wxFormBuilder
生成的代码。
https://stackoverflow.com/questions/18499256
复制