]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/XmlResourceSubclass.py
5 #----------------------------------------------------------------------
7 resourceText
= r
'''<?xml version="1.0"?>
10 <!-- Notice that the class IS a standard wx class, and a custom
11 subclass is specified as "moduleName.ClassName" Try changing
12 the classname to one that does not exist and see what happens -->
14 <object class="wxPanel" subclass="XmlResourceSubclass.MyCustomPanel" name="MyPanel">
16 <object class="wxStaticText" name="label1">
17 <label>This panel is a custom class derived from wx.Panel,\nand is loaded by a custom XmlResourceHandler.</label>
24 #----------------------------------------------------------------------
26 class MyCustomPanel(wx
.Panel
):
29 # the Create step is done by XRC.
31 self
.Bind(wx
.EVT_WINDOW_CREATE
, self
.OnCreate
)
32 self
.Bind(wx
.EVT_SIZE
, self
.OnSize
)
35 def OnCreate(self
, evt
):
36 # This is the little bit of customization that we do for this
37 # silly example. It could just as easily have been done in
38 # the resource. We do it in the EVT_WINDOW_CREATE handler
39 # because the window doesn't really exist yet in the __init__.
40 if self
is evt
.GetEventObject():
41 t
= wx
.StaticText(self
, -1, "MyCustomPanel")
44 f
.SetPointSize(f
.GetPointSize()+2)
47 # On OSX the EVT_SIZE happens before EVT_WINDOW_CREATE !?!
48 # so give it another kick
49 wx
.CallAfter(self
.OnSize
, None)
52 def OnSize(self
, evt
):
53 if hasattr(self
, 't'):
55 w
, h
= self
.t
.GetTextExtent(self
.t
.GetLabel())
57 self
.t
.SetPosition(((sz
.width
-w
)/2, (sz
.height
-h
)/2))
59 #----------------------------------------------------------------------
62 class TestPanel(wx
.Panel
):
63 def __init__(self
, parent
, log
):
65 wx
.Panel
.__init
__(self
, parent
, -1)
68 label
= wx
.StaticText(self
, -1, "The lower panel was built from this XML:")
69 label
.SetFont(wx
.Font(12, wx
.SWISS
, wx
.NORMAL
, wx
.BOLD
))
71 text
= wx
.TextCtrl(self
, -1, resourceText
,
72 style
=wx
.TE_READONLY|wx
.TE_MULTILINE
)
73 text
.SetInsertionPoint(0)
75 line
= wx
.StaticLine(self
, -1)
78 res
= xrc
.EmptyXmlResource()
79 res
.LoadFromString(resourceText
)
81 # Now create a panel from the resource data
82 panel
= res
.LoadPanel(self
, "MyPanel")
85 sizer
= wx
.BoxSizer(wx
.VERTICAL
)
86 sizer
.Add(label
, 0, wx
.EXPAND|wx
.TOP|wx
.LEFT
, 5)
87 sizer
.Add(text
, 1, wx
.EXPAND|wx
.ALL
, 5)
88 sizer
.Add(line
, 0, wx
.EXPAND
)
89 sizer
.Add(panel
, 1, wx
.EXPAND|wx
.ALL
, 5)
92 self
.SetAutoLayout(True)
95 #----------------------------------------------------------------------
97 def runTest(frame
, nb
, log
):
98 win
= TestPanel(nb
, log
)
101 #----------------------------------------------------------------------
105 overview
= """<html><body>
106 <h2><center>wx.XmlResourceSubclass</center></h2>
108 Sometimes it is necessary to use custom classes, but you still want
109 them to be created from XRC. The subclass XRC attribute allows you to
117 if __name__
== '__main__':
120 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])