problem with wxPanel derivation class

none "xaos\" at (none)
Thu Oct 11 14:45:56 EDT 2007


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.





More information about the Python-list mailing list