wxPython - 在继承的类中添加新对象?

时间:2014-02-27 08:03:43

标签: python-2.7 inheritance wxpython wxformbuilder

我不是一个完全的初学者,但我绝不是一个专家(也许我知道这很危险?:))。在发布之前,我尝试使用谷歌搜索答案并进行自己的故障排除约2小时。可能存在对此的解释,我可能使用了错误的术语。希望我已经在下面详细解释了这个问题。

我一直在使用wxFormBuilder来管理我的应用程序的GUI方面,而且一直都很顺利。但是我现在需要添加一个WebView对象,这个对象在可以使用wxFormBuilder添加的对象菜单中没有提供。

为了克服这个问题,我认为我应该能够在Inherited类文件中指定缺少的对象,然后编写一行以将其添加到Generated类文件中定义的现有Sizer中。我考虑手动将其添加到生成的代码文件中,但如果我需要进行更改并重新生成文件,我将丢失手动编写的代码。

在Inherited Class中创建新的WebView对象很好,但我无法弄清楚如何引用Sizer来添加它。

以下是我的继承类

的摘录
import wx
import wx.html2
import isdPhoneQueueGui  #My Generated Class

class isdPhoneQueueMain(isdPhoneQueueGui.isdPhoneQueue):
    def __init__(self, parent):
        isdPhoneQueueGui.isdPhoneQueue.__init__(self,parent)
        self.myPage = wx.html2.WebView.New(self.myPanel)
        #STUCK HERE - WHAT SCOPE TO USE: to add "myPage" object to existing Sizer "mySizer"???

从我的Generated Class(只显示“mySizer”的定义等)

class isdPhoneQueue ( wx.Frame ):    
    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"ISD Phone Queue", pos = wx.DefaultPosition, size = wx.Size( 1024,768 ), style = wx.CAPTION|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
        mySizer = wx.BoxSizer( wx.VERTICAL )
        self.myPanel = wx.Panel( self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.Size( 1024,768 ), wx.TAB_TRAVERSAL )
        self.myPanel.SetSizer( mySizer )

我有各种方法在继承类中引用mySizer,但未能以正确的方式引用它。

我最初想过在Generated Class中尝试它:

mySizer.Add(self.myPage, 1, wx.EXPAND, 10)

但这会给出“NameError:全局名称'mySizer'未定义”。

然后我尝试了各种引用前缀的组合,其中没有一个工作:

isdPhoneQueueGui.mySizer.Add(self.myPage, 1, wx.EXPAND, 10)
self.isdPhoneQueueGui.mySizer.Add(self.myPage, 1, wx.EXPAND, 10)
isdPhoneQueue.mySizer.Add(self.myPage, 1, wx.EXPAND, 10)
self.isdPhoneQueue.mySizer.Add(self.myPage, 1, wx.EXPAND, 10)

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

isdPhoneQueue.__init__()中的变量'mySizer'在该例程运行后不​​可用,因为它是一个局部变量。它所引用的sizer的引用被分配给面板self.myPanel - 这就是它所在的位置。

因此,您可以使用

在继承的类构造函数中获取它

the_sizer = self.myPanel.GetSizer()

...因为myPanel是一个可以访问的继承成员变量。