]> git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/demo/Sizers.py
fcc99b96e0af614fc1072d4baff5dc0c872db56b
[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
156 box2 = wxBoxSizer(wxHORIZONTAL)
157 box2.AddMany([ (wxButton(win, 1010, "one"), 0),
158 (wxButton(win, 1010, "two"), 0),
159 (wxButton(win, 1010, "three"), 0),
160 (wxButton(win, 1010, "four"), 0),
161 (wxButton(win, 1010, "five"), 0),
162 ])
163
164 insideBox.Add(box2, 0)
165
166 bdr = wxBorderSizer(wxALL)
167 bdr.Add(wxButton(win, 1010, "border"), 20)
168 insideBox.Add(bdr, 1)
169
170 box3 = wxBoxSizer(wxVERTICAL)
171 box3.AddMany([ (wxButton(win, 1010, "six"), 1),
172 (wxButton(win, 1010, "seven"), 2),
173 (wxButton(win, 1010, "eight"), 1),
174 (wxButton(win, 1010, "nine"), 1),
175 ])
176 insideBox.Add(box3, 1)
177
178 outsideBox = wxBoxSizer(wxVERTICAL)
179 outsideBox.Add(wxButton(win, 1010, "top"))
180 outsideBox.Add(insideBox, 1)
181 outsideBox.Add(wxButton(win, 1010, "bottom"))
182
183 return outsideBox
184
185
186 #----------------------------------------------------------------------
187
188 theTests = [
189 ("Simple horizontal boxes", makeSimpleBox1,
190 "This is a HORIZONTAL box sizer with four non-stretchable buttons held "
191 "within it. Notice that the buttons are added and aligned in the horizontal "
192 "dimension. Also notice that they are fixed size in the horizontal dimension, "
193 "but will stretch vertically."
194 ),
195
196 ("Simple vertical boxes", makeSimpleBox2,
197 "Exactly the same as the previous sample but using a VERTICAL box sizer "
198 "instead of a HORIZONTAL one."
199 ),
200
201 ("Add a stretchable", makeSimpleBox3,
202 "We've added one more button with the strechable flag turned on. Notice "
203 "how it grows to fill the extra space in the otherwise fixed dimension."
204 ),
205
206 ("More than one stretchable", makeSimpleBox4,
207 "Here there are several items that are stretchable, they all divide up the "
208 "extra space evenly."
209 ),
210
211 ("Weighting factor", makeSimpleBox5,
212 "This one shows more than one strechable, but one of them has a weighting "
213 "factor so it gets more of the free space."
214 ),
215
216 # ("Percent Sizer", makeSimpleBox6,
217 # "You can use the wxBoxSizer like a Percent Sizer. Just make sure that all "
218 # "the weighting factors add up to 100!"
219 # ),
220
221 ("", None, ""),
222
223 ("Simple border sizer", makeSimpleBorder1,
224 "The wxBorderSizer leaves empty space around its contents. This one "
225 "gives a border all the way around."
226 ),
227
228 ("East and West border", makeSimpleBorder2,
229 "You can pick and choose which sides have borders."
230 ),
231
232 ("North and West border", makeSimpleBorder3,
233 "You can pick and choose which sides have borders."
234 ),
235
236 ("", None, ""),
237
238 ("Boxes inside of boxes", makeBoxInBox,
239 "This one shows nesting of boxes within boxes within boxes, using both "
240 "orientations. Notice also that button seven has a greater weighting "
241 "factor than its siblings."
242 ),
243
244 ("Boxes inside a Border", makeBoxInBorder,
245 "Sizers of different types can be nested withing each other as well. "
246 "Here is a box sizer with several buttons embedded within a border sizer."
247 ),
248
249 ("Border in a Box", makeBorderInBox,
250 "Another nesting example. This one has Boxes and a Border inside another Box."
251 ),
252
253 ]
254 #----------------------------------------------------------------------
255
256 class TestFrame(wxFrame):
257 def __init__(self, parent, title, sizerFunc):
258 wxFrame.__init__(self, parent, -1, title)
259 EVT_BUTTON(self, 1010, self.OnButton)
260
261 self.sizer = sizerFunc(self)
262 self.CreateStatusBar()
263
264 self.sizer.FitWindow(self)
265
266
267
268 def OnSize(self, event):
269 size = self.GetClientSize()
270 self.sizer.Layout(size)
271
272 def OnCloseWindow(self, event):
273 self.MakeModal(false)
274 self.Destroy()
275
276 def OnButton(self, event):
277 self.Close(true)
278
279 #----------------------------------------------------------------------
280
281
282
283 class TestSelectionPanel(wxPanel):
284 def __init__(self, parent, frame):
285 wxPanel.__init__(self, parent, -1)
286 self.frame = frame
287
288 self.list = wxListBox(self, 401,
289 wxDLG_PNT(self, 10, 10), wxDLG_SZE(self, 100, 60),
290 [])
291 EVT_LISTBOX(self, 401, self.OnSelect)
292 EVT_LISTBOX_DCLICK(self, 401, self.OnDClick)
293
294 wxButton(self, 402, "Try it!", wxDLG_PNT(self, 120, 10)).SetDefault()
295 EVT_BUTTON(self, 402, self.OnDClick)
296
297 self.text = wxTextCtrl(self, -1, "",
298 wxDLG_PNT(self, 10, 80),
299 wxDLG_SZE(self, 200, 60),
300 wxTE_MULTILINE | wxTE_READONLY)
301
302 for item in theTests:
303 self.list.Append(item[0])
304
305
306
307 def OnSelect(self, event):
308 pos = self.list.GetSelection()
309 self.text.SetValue(theTests[pos][2])
310
311
312 def OnDClick(self, event):
313 pos = self.list.GetSelection()
314 title = theTests[pos][0]
315 func = theTests[pos][1]
316
317 if func:
318 win = TestFrame(self, title, func)
319 win.CentreOnParent(wxBOTH)
320 win.Show(true)
321 win.MakeModal(true)
322
323 #----------------------------------------------------------------------
324
325 def runTest(frame, nb, log):
326 win = TestSelectionPanel(nb, frame)
327 return win
328
329 overview = wxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
330 wxBoxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
331 wxBorderSizer.__doc__
332
333 #----------------------------------------------------------------------
334
335
336
337 if __name__ == '__main__':
338
339 class MainFrame(wxFrame):
340 def __init__(self):
341 wxFrame.__init__(self, NULL, -1, "Testing...")
342
343 self.CreateStatusBar()
344 mainmenu = wxMenuBar()
345 menu = wxMenu()
346 menu.Append(200, 'E&xit', 'Get the heck outta here!')
347 mainmenu.Append(menu, "&File")
348 self.SetMenuBar(mainmenu)
349 EVT_MENU(self, 200, self.OnExit)
350 self.panel = TestSelectionPanel(self)
351 self.SetSize(wxSize(400, 380))
352
353 def OnCloseWindow(self, event):
354 self.Destroy()
355
356 def OnExit(self, event):
357 self.Close(true)
358
359
360 class TestApp(wxApp):
361 def OnInit(self):
362 frame = MainFrame()
363 frame.Show(true)
364 self.SetTopWindow(frame)
365 return true
366
367 app = TestApp(0)
368 app.MainLoop()
369
370
371 #----------------------------------------------------------------------