【发布时间】:2013-09-01 04:43:33
【问题描述】:
我正在 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,有没有办法从另一个类访问对象,即使我直接继承它? - 有没有办法更改 wxFormBuilder 中的设置,使其附加
self?
【问题讨论】:
-
只是一个建议:如果你是类 GUI 的职责只是更新一个 MyFrame 对象,它不应该从 MyFrame 继承,而是有一个 MyFrame 成员并以这种方式操作它(即更改文本,移动周围的东西......)。这样您就可以将视图和控制器分开
-
不错的主意,谢谢!
标签: python class inheritance wxwidgets wxformbuilder