]> git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/demo/Sizers.py
Significantly improved thanks to vi.
[wxWidgets.git] / utils / wxPython / demo / Sizers.py
1 #----------------------------------------------------------------------
2 # sizer test code
3 #----------------------------------------------------------------------
4
5 from wxPython.wx import *
6 from wxPython.lib.sizers import *
7
8 #----------------------------------------------------------------------
9
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)
16
17 return box
18
19 #----------------------------------------------------------------------
20
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)
27
28 return box
29
30 #----------------------------------------------------------------------
31
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)
39
40 return box
41
42 #----------------------------------------------------------------------
43
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)
51
52 return box
53
54 #----------------------------------------------------------------------
55
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)
63
64 return box
65
66 #----------------------------------------------------------------------
67
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)
75
76 return box
77
78 #----------------------------------------------------------------------
79
80 def makeSimpleBorder1(win):
81 bdr = wxBorderSizer(wxALL)
82 btn = wxButton(win, 1010, "border")
83 btn.SetSize(wxSize(80, 80))
84 bdr.Add(btn, 15)
85
86 return bdr
87
88 #----------------------------------------------------------------------
89
90 def makeSimpleBorder2(win):
91 bdr = wxBorderSizer(wxEAST | wxWEST)
92 btn = wxButton(win, 1010, "border")
93 btn.SetSize(wxSize(80, 80))
94 bdr.Add(btn, 15)
95
96 return bdr
97
98 #----------------------------------------------------------------------
99
100 def makeSimpleBorder3(win):
101 bdr = wxBorderSizer(wxNORTH | wxWEST)
102 btn = wxButton(win, 1010, "border")
103 btn.SetSize(wxSize(80, 80))
104 bdr.Add(btn, 15)
105
106 return bdr
107
108 #----------------------------------------------------------------------
109 #----------------------------------------------------------------------
110
111 def makeBoxInBox(win):
112 box = wxBoxSizer(wxVERTICAL)
113
114 btn = wxButton(win, 1010, "one")
115 box.Add(btn)
116
117 box2 = wxBoxSizer(wxHORIZONTAL)
118 btn = wxButton(win, 1010, "two")
119 box2.Add(btn)
120 btn = wxButton(win, 1010, "three")
121 box2.Add(btn)
122 btn = wxButton(win, 1010, "four")
123 box2.Add(btn)
124 btn = wxButton(win, 1010, "five")
125 box2.Add(btn)
126
127 box3 = wxBoxSizer(wxVERTICAL)
128 box3.AddMany([ (wxButton(win, 1010, "six"), 1),
129 (wxButton(win, 1010, "seven"), 2),
130 (wxButton(win, 1010, "eight"), 1),
131 (wxButton(win, 1010, "nine"), 1),
132 ])
133
134 box2.Add(box3, 1)
135 box.Add(box2, 1)
136
137 btn = wxButton(win, 1010, "ten")
138 box.Add(btn)
139
140 return box
141
142 #----------------------------------------------------------------------
143
144 def makeBoxInBorder(win):
145 bdr = wxBorderSizer(wxALL)
146 box = makeSimpleBox3(win)
147 bdr.Add(box, 15)
148
149 return bdr
150
151 #----------------------------------------------------------------------
152
153 def makeBorderInBox(win):
154 insideBox = wxBoxSizer(wxHORIZONTAL)
155 insideBox.Add(makeSimpleBox3(win), 1)
156
157 bdr = wxBorderSizer(wxALL)
158 bdr.Add(wxButton(win, 1010, "border"), 20)
159 insideBox.Add(bdr, 1)
160
161 box3 = wxBoxSizer(wxVERTICAL)
162 box3.AddMany([ (wxButton(win, 1010, "six"), 1),
163 (wxButton(win, 1010, "seven"), 2),
164 (wxButton(win, 1010, "eight"), 1),
165 (wxButton(win, 1010, "nine"), 1),
166 ])
167 insideBox.Add(box3, 1)
168
169 outsideBox = wxBoxSizer(wxVERTICAL)
170 outsideBox.Add(wxButton(win, 1010, "top"))
171 outsideBox.Add(insideBox, 1)
172 outsideBox.Add(wxButton(win, 1010, "bottom"))
173
174 return outsideBox
175
176
177 #----------------------------------------------------------------------
178
179 theTests = [
180 ("Simple horizontal boxes", makeSimpleBox1,
181 "This is a HORIZONTAL box sizer with four non-stretchable buttons held "
182 "within it. Notice that the buttons are added and aligned in the horizontal "
183 "dimension. Also notice that they are fixed size in the horizontal dimension, "
184 "but will stretch vertically."
185 ),
186
187 ("Simple vertical boxes", makeSimpleBox2,
188 "Exactly the same as the previous sample but using a VERTICAL box sizer "
189 "instead of a HORIZONTAL one."
190 ),
191
192 ("Add a stretchable", makeSimpleBox3,
193 "We've added one more button with the strechable flag turned on. Notice "
194 "how it grows to fill the extra space in the otherwise fixed dimension."
195 ),
196
197 ("More than one stretchable", makeSimpleBox4,
198 "Here there are several items that are stretchable, they all divide up the "
199 "extra space evenly."
200 ),
201
202 ("Weighting factor", makeSimpleBox5,
203 "This one shows more than one strechable, but one of them has a weighting "
204 "factor so it gets more of the free space."
205 ),
206
207 # ("Percent Sizer", makeSimpleBox6,
208 # "You can use the wxBoxSizer like a Percent Sizer. Just make sure that all "
209 # "the weighting factors add up to 100!"
210 # ),
211
212 ("", None, ""),
213
214 ("Simple border sizer", makeSimpleBorder1,
215 "The wxBorderSizer leaves empty space around its contents. This one "
216 "gives a border all the way around."
217 ),
218
219 ("East and West border", makeSimpleBorder2,
220 "You can pick and choose which sides have borders."
221 ),
222
223 ("North and West border", makeSimpleBorder3,
224 "You can pick and choose which sides have borders."
225 ),
226
227 ("", None, ""),
228
229 ("Boxes inside of boxes", makeBoxInBox,
230 "This one shows nesting of boxes within boxes within boxes, using both "
231 "orientations. Notice also that button seven has a greater weighting "
232 "factor than its siblings."
233 ),
234
235 ("Boxes inside a Border", makeBoxInBorder,
236 "Sizers of different types can be nested withing each other as well. "
237 "Here is a box sizer with several buttons embedded within a border sizer."
238 ),
239
240 ("Border in a Box", makeBorderInBox,
241 ""
242 ),
243
244 ]
245 #----------------------------------------------------------------------
246
247 class TestFrame(wxFrame):
248 def __init__(self, parent, title, sizerFunc):
249 wxFrame.__init__(self, parent, -1, title)
250 EVT_BUTTON(self, 1010, self.OnButton)
251
252 self.sizer = sizerFunc(self)
253 self.CreateStatusBar()
254
255 self.sizer.FitWindow(self)
256
257
258
259 def OnSize(self, event):
260 size = self.GetClientSize()
261 self.sizer.Layout(size)
262
263 def OnCloseWindow(self, event):
264 self.MakeModal(false)
265 self.Destroy()
266
267 def OnButton(self, event):
268 self.Close(true)
269
270 #----------------------------------------------------------------------
271
272
273
274 class TestSelectionPanel(wxPanel):
275 def __init__(self, parent, frame):
276 wxPanel.__init__(self, parent, -1)
277 self.frame = frame
278
279 self.list = wxListBox(self, 401,
280 wxDLG_PNT(self, 10, 10), wxDLG_SZE(self, 100, 60),
281 [])
282 EVT_LISTBOX(self, 401, self.OnSelect)
283 EVT_LISTBOX_DCLICK(self, 401, self.OnDClick)
284
285 wxButton(self, 402, "Try it!", wxDLG_PNT(self, 120, 10)).SetDefault()
286 EVT_BUTTON(self, 402, self.OnDClick)
287
288 self.text = wxTextCtrl(self, -1, "",
289 wxDLG_PNT(self, 10, 80),
290 wxDLG_SZE(self, 200, 60),
291 wxTE_MULTILINE | wxTE_READONLY)
292
293 for item in theTests:
294 self.list.Append(item[0])
295
296
297
298 def OnSelect(self, event):
299 pos = self.list.GetSelection()
300 self.text.SetValue(theTests[pos][2])
301
302
303 def OnDClick(self, event):
304 pos = self.list.GetSelection()
305 title = theTests[pos][0]
306 func = theTests[pos][1]
307
308 if func:
309 win = TestFrame(self, title, func)
310 win.CentreOnParent(wxBOTH)
311 win.Show(true)
312 win.MakeModal(true)
313
314 #----------------------------------------------------------------------
315
316 def runTest(frame, nb, log):
317 win = TestSelectionPanel(nb, frame)
318 return win
319
320 overview = wxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
321 wxBoxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
322 wxBorderSizer.__doc__
323
324 #----------------------------------------------------------------------
325
326
327
328 if __name__ == '__main__':
329
330 class MainFrame(wxFrame):
331 def __init__(self):
332 wxFrame.__init__(self, NULL, -1, "Testing...")
333
334 self.CreateStatusBar()
335 mainmenu = wxMenuBar()
336 menu = wxMenu()
337 menu.Append(200, 'E&xit', 'Get the heck outta here!')
338 mainmenu.Append(menu, "&File")
339 self.SetMenuBar(mainmenu)
340 EVT_MENU(self, 200, self.OnExit)
341 self.panel = TestSelectionPanel(self)
342 self.SetSize(wxSize(400, 380))
343
344 def OnCloseWindow(self, event):
345 self.Destroy()
346
347 def OnExit(self, event):
348 self.Close(true)
349
350
351 class TestApp(wxApp):
352 def OnInit(self):
353 frame = MainFrame()
354 frame.Show(true)
355 self.SetTopWindow(frame)
356 return true
357
358 app = TestApp(0)
359 app.MainLoop()
360
361
362 #----------------------------------------------------------------------