1 #----------------------------------------------------------------------
3 #----------------------------------------------------------------------
5 from wxPython
.wx
import *
6 from wxPython
.lib
.sizers
import *
8 #----------------------------------------------------------------------
10 def makeSimpleBox1(win
):
11 box
= wxBoxSizer(wxHORIZONTAL
)
12 box
.Add(wxButton(win
, 1010, "one"), 0)
13 box
.Add(wxButton(win
, 1010, "two"), 0)
14 box
.Add(wxButton(win
, 1010, "three"), 0)
15 box
.Add(wxButton(win
, 1010, "four"), 0)
19 #----------------------------------------------------------------------
21 def makeSimpleBox2(win
):
22 box
= wxBoxSizer(wxVERTICAL
)
23 box
.Add(wxButton(win
, 1010, "one"), 0)
24 box
.Add(wxButton(win
, 1010, "two"), 0)
25 box
.Add(wxButton(win
, 1010, "three"), 0)
26 box
.Add(wxButton(win
, 1010, "four"), 0)
30 #----------------------------------------------------------------------
32 def makeSimpleBox3(win
):
33 box
= wxBoxSizer(wxHORIZONTAL
)
34 box
.Add(wxButton(win
, 1010, "one"), 0)
35 box
.Add(wxButton(win
, 1010, "two"), 0)
36 box
.Add(wxButton(win
, 1010, "three"), 0)
37 box
.Add(wxButton(win
, 1010, "four"), 0)
38 box
.Add(wxButton(win
, 1010, "five"), 1)
42 #----------------------------------------------------------------------
44 def makeSimpleBox4(win
):
45 box
= wxBoxSizer(wxHORIZONTAL
)
46 box
.Add(wxButton(win
, 1010, "one"), 0)
47 box
.Add(wxButton(win
, 1010, "two"), 0)
48 box
.Add(wxButton(win
, 1010, "three"), 1)
49 box
.Add(wxButton(win
, 1010, "four"), 1)
50 box
.Add(wxButton(win
, 1010, "five"), 1)
54 #----------------------------------------------------------------------
56 def makeSimpleBox5(win
):
57 box
= wxBoxSizer(wxHORIZONTAL
)
58 box
.Add(wxButton(win
, 1010, "one"), 0)
59 box
.Add(wxButton(win
, 1010, "two"), 0)
60 box
.Add(wxButton(win
, 1010, "three"), 3)
61 box
.Add(wxButton(win
, 1010, "four"), 1)
62 box
.Add(wxButton(win
, 1010, "five"), 1)
66 #----------------------------------------------------------------------
68 def makeSimpleBox6(win
):
69 box
= wxBoxSizer(wxHORIZONTAL
, wxSize(250, 50))
70 box
.Add(wxButton(win
, 1010, "10"), 10)
71 box
.Add(wxButton(win
, 1010, "20"), 20)
72 box
.Add(wxButton(win
, 1010, "30"), 30)
73 box
.Add(wxButton(win
, 1010, "15"), 15)
74 box
.Add(wxButton(win
, 1010, "5"), 5)
78 #----------------------------------------------------------------------
80 def makeSimpleBorder1(win
):
81 bdr
= wxBorderSizer(wxALL
)
82 btn
= wxButton(win
, 1010, "border")
83 btn
.SetSize(wxSize(80, 80))
88 #----------------------------------------------------------------------
90 def makeSimpleBorder2(win
):
91 bdr
= wxBorderSizer(wxEAST | wxWEST
)
92 btn
= wxButton(win
, 1010, "border")
93 btn
.SetSize(wxSize(80, 80))
98 #----------------------------------------------------------------------
100 def makeSimpleBorder3(win
):
101 bdr
= wxBorderSizer(wxNORTH | wxWEST
)
102 btn
= wxButton(win
, 1010, "border")
103 btn
.SetSize(wxSize(80, 80))
108 #----------------------------------------------------------------------
109 #----------------------------------------------------------------------
111 def makeBoxInBox(win
):
112 box
= wxBoxSizer(wxVERTICAL
)
114 box
.Add(wxButton(win
, 1010, "one"))
116 box2
= wxBoxSizer(wxHORIZONTAL
)
117 box2
.AddMany([ wxButton(win
, 1010, "two"),
118 wxButton(win
, 1010, "three"),
119 wxButton(win
, 1010, "four"),
120 wxButton(win
, 1010, "five"),
123 box3
= wxBoxSizer(wxVERTICAL
)
124 box3
.AddMany([ (wxButton(win
, 1010, "six"), 0),
125 (wxButton(win
, 1010, "seven"), 2),
126 (wxButton(win
, 1010, "eight"), 1),
127 (wxButton(win
, 1010, "nine"), 1),
133 box
.Add(wxButton(win
, 1010, "ten"))
137 #----------------------------------------------------------------------
139 def makeBoxInBorder(win
):
140 bdr
= wxBorderSizer(wxALL
)
141 box
= makeSimpleBox3(win
)
146 #----------------------------------------------------------------------
148 def makeBorderInBox(win
):
149 insideBox
= wxBoxSizer(wxHORIZONTAL
)
151 box2
= wxBoxSizer(wxHORIZONTAL
)
152 box2
.AddMany([ wxButton(win
, 1010, "one"),
153 wxButton(win
, 1010, "two"),
154 wxButton(win
, 1010, "three"),
155 wxButton(win
, 1010, "four"),
156 wxButton(win
, 1010, "five"),
159 insideBox
.Add(box2
, 0)
161 bdr
= wxBorderSizer(wxALL
)
162 bdr
.Add(wxButton(win
, 1010, "border"), 20)
163 insideBox
.Add(bdr
, 1)
165 box3
= wxBoxSizer(wxVERTICAL
)
166 box3
.AddMany([ (wxButton(win
, 1010, "six"), 0),
167 (wxButton(win
, 1010, "seven"), 2),
168 (wxButton(win
, 1010, "eight"), 1),
169 (wxButton(win
, 1010, "nine"), 1),
171 insideBox
.Add(box3
, 1)
173 outsideBox
= wxBoxSizer(wxVERTICAL
)
174 outsideBox
.Add(wxButton(win
, 1010, "top"))
175 outsideBox
.Add(insideBox
, 1)
176 outsideBox
.Add(wxButton(win
, 1010, "bottom"))
181 #----------------------------------------------------------------------
184 ("Simple horizontal boxes", makeSimpleBox1
,
185 "This is a HORIZONTAL box sizer with four non-stretchable buttons held "
186 "within it. Notice that the buttons are added and aligned in the horizontal "
187 "dimension. Also notice that they are fixed size in the horizontal dimension, "
188 "but will stretch vertically."
191 ("Simple vertical boxes", makeSimpleBox2
,
192 "Exactly the same as the previous sample but using a VERTICAL box sizer "
193 "instead of a HORIZONTAL one."
196 ("Add a stretchable", makeSimpleBox3
,
197 "We've added one more button with the strechable flag turned on. Notice "
198 "how it grows to fill the extra space in the otherwise fixed dimension."
201 ("More than one stretchable", makeSimpleBox4
,
202 "Here there are several items that are stretchable, they all divide up the "
203 "extra space evenly."
206 ("Weighting factor", makeSimpleBox5
,
207 "This one shows more than one strechable, but one of them has a weighting "
208 "factor so it gets more of the free space."
211 # ("Percent Sizer", makeSimpleBox6,
212 # "You can use the wxBoxSizer like a Percent Sizer. Just make sure that all "
213 # "the weighting factors add up to 100!"
218 ("Simple border sizer", makeSimpleBorder1
,
219 "The wxBorderSizer leaves empty space around its contents. This one "
220 "gives a border all the way around."
223 ("East and West border", makeSimpleBorder2
,
224 "You can pick and choose which sides have borders."
227 ("North and West border", makeSimpleBorder3
,
228 "You can pick and choose which sides have borders."
233 ("Boxes inside of boxes", makeBoxInBox
,
234 "This one shows nesting of boxes within boxes within boxes, using both "
235 "orientations. Notice also that button seven has a greater weighting "
236 "factor than its siblings."
239 ("Boxes inside a Border", makeBoxInBorder
,
240 "Sizers of different types can be nested withing each other as well. "
241 "Here is a box sizer with several buttons embedded within a border sizer."
244 ("Border in a Box", makeBorderInBox
,
245 "Another nesting example. This one has Boxes and a Border inside another Box."
249 #----------------------------------------------------------------------
251 class TestFrame(wxFrame
):
252 def __init__(self
, parent
, title
, sizerFunc
):
253 wxFrame
.__init
__(self
, parent
, -1, title
)
254 EVT_BUTTON(self
, 1010, self
.OnButton
)
256 self
.sizer
= sizerFunc(self
)
257 self
.CreateStatusBar()
258 self
.SetStatusText("Resize this frame to see how the sizers respond...")
259 self
.sizer
.FitWindow(self
)
262 def OnSize(self
, event
):
263 size
= self
.GetClientSize()
264 self
.sizer
.Layout(size
)
266 def OnCloseWindow(self
, event
):
267 self
.MakeModal(false
)
270 def OnButton(self
, event
):
273 #----------------------------------------------------------------------
277 class TestSelectionPanel(wxPanel
):
278 def __init__(self
, parent
, frame
):
279 wxPanel
.__init
__(self
, parent
, -1)
282 self
.list = wxListBox(self
, 401,
283 wxDLG_PNT(self
, 10, 10), wxDLG_SZE(self
, 100, 60),
285 EVT_LISTBOX(self
, 401, self
.OnSelect
)
286 EVT_LISTBOX_DCLICK(self
, 401, self
.OnDClick
)
288 wxButton(self
, 402, "Try it!", wxDLG_PNT(self
, 120, 10)).SetDefault()
289 EVT_BUTTON(self
, 402, self
.OnDClick
)
291 self
.text
= wxTextCtrl(self
, -1, "",
292 wxDLG_PNT(self
, 10, 80),
293 wxDLG_SZE(self
, 200, 60),
294 wxTE_MULTILINE | wxTE_READONLY
)
296 for item
in theTests
:
297 self
.list.Append(item
[0])
301 def OnSelect(self
, event
):
302 pos
= self
.list.GetSelection()
303 self
.text
.SetValue(theTests
[pos
][2])
306 def OnDClick(self
, event
):
307 pos
= self
.list.GetSelection()
308 title
= theTests
[pos
][0]
309 func
= theTests
[pos
][1]
312 win
= TestFrame(self
, title
, func
)
313 win
.CentreOnParent(wxBOTH
)
317 #----------------------------------------------------------------------
319 def runTest(frame
, nb
, log
):
320 win
= TestSelectionPanel(nb
, frame
)
323 overview
= wxSizer
.__doc
__ + '\n' + '-' * 80 + '\n' + \
324 wxBoxSizer
.__doc
__ + '\n' + '-' * 80 + '\n' + \
325 wxBorderSizer
.__doc
__
327 #----------------------------------------------------------------------
331 if __name__
== '__main__':
333 class MainFrame(wxFrame
):
335 wxFrame
.__init
__(self
, NULL
, -1, "Testing...")
337 self
.CreateStatusBar()
338 mainmenu
= wxMenuBar()
340 menu
.Append(200, 'E&xit', 'Get the heck outta here!')
341 mainmenu
.Append(menu
, "&File")
342 self
.SetMenuBar(mainmenu
)
343 EVT_MENU(self
, 200, self
.OnExit
)
344 self
.panel
= TestSelectionPanel(self
)
345 self
.SetSize(wxSize(400, 380))
347 def OnCloseWindow(self
, event
):
350 def OnExit(self
, event
):
354 class TestApp(wxApp
):
358 self
.SetTopWindow(frame
)
365 #----------------------------------------------------------------------