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



我不是一个完全的初学者,但我决不是一个专家(也许我知道足够的危险?:))。在发布这篇文章之前,我试着在谷歌上搜索答案,并自己进行了大约2个小时的故障排除。这很可能有一个解释,我可能使用了错误的术语。希望我在下面已经很好地解释了这个问题。

我一直在使用wxFormBuilder来管理我的应用程序的GUI方面,一切都很顺利。然而,我现在需要添加一个WebView对象,它在可以使用wxFormBuilder添加的对象菜单中没有得到满足。

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

在继承类中创建新的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"???

从我生成的类(只是显示"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,但未能找到正确的引用方法。

我最初想在生成类中尝试一下:

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)

提前感谢您的帮助。

isdPhoneQueue.__init__()中的变量"mySizer"在该例程运行后不可用,因为它是一个局部变量。它所指的sizer的引用被分配给面板self.myPanel,它就留在那里。

因此,您可以使用在继承的类构造函数中获得它

the_sizer = self.myPanel.GetSizer()

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

最新更新