我不是一个完全的初学者,但我绝不是一个专家(也许我知道这很危险?:))。在发布之前,我尝试使用谷歌搜索答案并进行自己的故障排除约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)
提前感谢您的任何帮助。
答案 0 :(得分:0)
isdPhoneQueue.__init__()
中的变量'mySizer'在该例程运行后不可用,因为它是一个局部变量。它所引用的sizer的引用被分配给面板self.myPanel - 这就是它所在的位置。
因此,您可以使用
在继承的类构造函数中获取它 the_sizer = self.myPanel.GetSizer()
...因为myPanel是一个可以访问的继承成员变量。