wxGlade created a simple Frame with a panel a sizer and 3 wxControls , saticText, TextCtrl, and a Button.
The resulting code works fine. Now the problem. I wish to make a separate class derrived from wxPanel that has the sized and controls as above. It jusst won't work <code id="gladeGen" class="works_ok"> #!/usr/bin/env python # -*- coding: ISO-8859-1 -*- # generated by wxGlade 0.4cvs on Thu Oct 11 13:26:19 2007 import wx class MyFrameOne(wx.Frame): def __init__(self, *args, **kwds): # begin wxGlade: MyFrameOne.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.panel = wx.Panel(self, -1) self.staticbox = wx.StaticBox(self.panel, -1, "StaticBox") self.label = wx.StaticText(self.panel, -1, "Field Name") self.textBox = wx.TextCtrl(self.panel, -1, "Field Value") self.button = wx.Button(self.panel, -1, "Edit") self.__set_properties() self.__do_layout() # end wxGlade def __set_properties(self): # begin wxGlade: MyFrameOne.__set_properties self.SetTitle("frame_1") self.label.SetMinSize((-1, 15)) # end wxGlade def __do_layout(self): # begin wxGlade: MyFrameOne.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL) sizer.Add(self.label, 0, wx.ALL, 3) sizer.Add(self.textBox, 0, wx.ALL, 3) sizer.Add(self.button, 0, wx.ALL, 3) self.panel.SetAutoLayout(True) self.panel.SetSizer(sizer) sizer.Fit(self.panel) sizer.SetSizeHints(self.panel) sizer_1.Add(self.panel, 1, wx.EXPAND, 0) self.SetAutoLayout(True) self.SetSizer(sizer_1) sizer_1.Fit(self) sizer_1.SetSizeHints(self) self.Layout() # end wxGlade # end of class MyFrameOne ## modified from BoaApp class App(wx.App): def OnInit(self): wx.InitAllImageHandlers() self.main = MyFrameOne(None) self.main.Show() self.SetTopWindow(self.main) return True def main(): application = App(0) application.MainLoop() if __name__ == '__main__': main() </code> <code id="modifiedFromGlade" class="fails"> #!/usr/bin/env python # -*- coding: ISO-8859-1 -*- #The commented out code from MyFrame was moved to class Panel \ # and appropriately modified by changing self.panel to self etc import wx class MyFrameTwo(wx.Frame): def __init__(self, *args, **kwds): # begin wxGlade: MyFrameTwo.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) ## self.panel = panel(self, -1) self.panel = Panel(self, -1) self.__set_properties() self.__do_layout() # end wxGlade def __set_properties(self): # begin wxGlade: MyFrameTwo.__set_properties self.SetTitle("frame_1") self.label.SetMinSize((-1, 15)) # end wxGlade def __do_layout(self): # begin wxGlade: MyFrameTwo.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) ## sizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL) ## sizer.Add(self.label, 0, wx.ALL, 3) ## sizer.Add(self.textBox, 0, wx.ALL, 3) ## sizer.Add(self.button, 0, wx.ALL, 3) #### self.panel.SetAutoLayout(True) ## self.panel.SetSizer(sizer) ## sizer.Fit(self.panel) ## sizer.SetSizeHints(self.panel) sizer_1.Add(self.panel, 1, wx.EXPAND, 0) self.SetAutoLayout(True) self.SetSizer(sizer_1) sizer_1.Fit(self) sizer_1.SetSizeHints(self) self.Layout() # end wxGlade # end of class MyFrameTwo class Panel (wx.Panel): def __init__(self, *args, **kwds): self.staticbox = wx.StaticBox(self, -1, "StaticBox") self.label = wx.StaticText(self, -1, "Field Name") self.textBox = wx.TextCtrl(self, -1, "Field Value") self.button = wx.Button(self, -1, "Edit") __doLayout() def __doLayout(): sizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL) sizer.Add(self.label, 0, wx.ALL, 3) sizer.Add(self.textBox, 0, wx.ALL, 3) sizer.Add(self.button, 0, wx.ALL, 3) # maybe comment this and uncommennt frame2's corresponding line panel.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self.panel) sizer.SetSizeHints(self.panel) ## modified from BoaApp class App(wx.App): def OnInit(self): wx.InitAllImageHandlers() self.main = MyFrameTwo(None) self.main.Show() self.SetTopWindow(self.main) return True def main(): application = App(0) application.MainLoop() if __name__ == '__main__': main() </code> <errorMessages> /home/xaos/xpy/cnc/i2g/prefDialog/test/frame2.py Traceback (most recent call last): File "/home/xaos/xpy/cnc/i2g/prefDialog/test/frame2.py", line 82, in ? main() File "~/xpy/cnc/i2g/prefDialog/test/frame2.py", line 78, in main application = App(0) File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/_core.py", line 7473, in __init__ self._BootstrapApp() File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/_core.py", line 7125, in _BootstrapApp return _core_.PyApp__BootstrapApp(*args, **kwargs) File "~/xpy/cnc/i2g/prefDialog/test/frame2.py", line 72, in OnInit self.main = MyFrameTwo(None) File "~/xpy/cnc/i2g/prefDialog/test/frame2.py", line 13, in __init__ self.panel = Panel(self, -1) File "~/xpy/cnc/i2g/prefDialog/test/frame2.py", line 48, in __init__ self.staticbox = wx.StaticBox(self, -1, "StaticBox") File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/_controls.py", line 990, in __init__ newobj = _controls_.new_StaticBox(*args, **kwargs) TypeError: argument number 1: a 'wxWindow *' is expected, 'Panel' is received Script terminated. </errorMessages> It seems as though the complaint is that a 'wxWindow *' is expected, 'Panel' is received However, Panel IS a wx.Panel derivative which IS a wx.Window derivative! Additionally, the methods in the code of Panel and MyFrameOne seem to be identical. I can't understand this. Anyone have any thoughts? I'm using spe as an IDE ~S~ I taught myself everything I know about Python and wxPython in the lasst week and I still don't know everything. -- http://mail.python.org/mailman/listinfo/python-list