1 
   2 # Contributor and minor fixes: Marcelo Barbero, Argentina
   3 # Revision: 02 May 2006
   4 
   5 # LearnSizer*.py is a small application aimed to learn the sizers and
   6 # their usage.
   7 # This application is a collection of panels. Each panel contains
   8 # a few widgets laid out with sizers. The panels are numbered
   9 # MyPanel_0 to MyPanel_n. The panel 0 is the simpliest case. The
  10 # order of the panels follows an increasing complexity in the
  11 # layout. It is warmly recommended to start with MyPanel_0.
  12 #
  13 # Do not forget:
  14 # - the wxPython doc
  15 # - the wiki page http://wiki.wxpython.org/index.cgi/UsingSizers
  16 # - dir(<instance of a sizer>) for a list of methods
  17 # - print sizer.method.__doc__
  18 #
  19 #--------------------------------------------------------------------
  20 
  21 import os
  22 import sys
  23 import wx
  24 
  25 #-------------------------------------------------------------------
  26 
  27 # - a wx.Window with a coloured background
  28 # - pos and size == (-1, -1) since sizers are used
  29 class ColWin(wx.Window):
  30 
  31     def __init__(self, parent, id, BackColour):
  32         wx.Window.__init__(self, parent, id, (-1, -1), (-1, -1), wx.SIMPLE_BORDER)
  33         self.SetBackgroundColour(BackColour)
  34 
  35 #-------------------------------------------------------------------
  36 
  37 
  38 class MyPanel_0(wx.Panel):
  39     """
  40     - the simplest sizer, a ColWin
  41     - use of named arguments
  42     """
  43 
  44     def __init__(self, parent):
  45         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
  46 
  47         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
  48 
  49         b = 20
  50         vsizer1 = wx.BoxSizer(orient=wx.VERTICAL)
  51         # or
  52         # vsizer1 = wx.BoxSizer(orient=wx.HORIZONTAL)
  53         vsizer1.Add(item=wgreen, proportion=1, flag=wx.EXPAND | wx.ALL, border=b)
  54         self.SetSizer(vsizer1)
  55 
  56 #-------------------------------------------------------------------
  57 
  58 class MyPanel_1(wx.Panel):
  59     """
  60     - two ColWins, vertically
  61     """
  62 
  63     def __init__(self, parent):
  64         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
  65 
  66         wred = ColWin(self, wx.NewId(), wx.RED)
  67         wblue = ColWin(self, wx.NewId(), wx.BLUE)
  68 
  69         b = 5
  70         vsizer1 = wx.BoxSizer(wx.VERTICAL)
  71         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
  72         vsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
  73         self.SetSizer(vsizer1)
  74 
  75 #-------------------------------------------------------------------
  76 
  77 class MyPanel_2(wx.Panel):
  78     """
  79     - three ColWins, horizontally
  80     """
  81 
  82     def __init__(self, parent):
  83         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
  84 
  85         wred = ColWin(self, wx.NewId(), wx.RED)
  86         wblue = ColWin(self, wx.NewId(), wx.BLUE)
  87         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
  88 
  89         b = 5
  90         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
  91         hsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
  92         hsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
  93         hsizer1.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
  94         self.SetSizer(hsizer1)
  95 
  96 #-------------------------------------------------------------------
  97 
  98 class MyPanel_3(wx.Panel):
  99     """
 100     - three ColWins, horizontally, height ratio 1:2:3
 101     """
 102 
 103     def __init__(self, parent):
 104         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 105 
 106         wred = ColWin(self, wx.NewId(), wx.RED)
 107         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 108         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
 109 
 110         b = 5
 111         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 112         hsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 113         hsizer1.Add(wblue, 2, wx.EXPAND | wx.ALL, b)
 114         hsizer1.Add(wgreen, 3, wx.EXPAND | wx.ALL, b)
 115         self.SetSizer(hsizer1)
 116 
 117 #-------------------------------------------------------------------
 118 
 119 class MyPanel_4(wx.Panel):
 120     """
 121     - two ColWins, vertically, a fixed width of 50 pixels between the two items
 122     """
 123 
 124     def __init__(self, parent):
 125         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 126 
 127         wred = ColWin(self, wx.NewId(), wx.RED)
 128         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 129 
 130         b = 5
 131         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 132         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 133         vsizer1.Add((-1, 50), 0,  wx.ALL, b)
 134         vsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 135         self.SetSizer(vsizer1)
 136 
 137 #-------------------------------------------------------------------
 138 
 139 class MyPanel_5(wx.Panel):
 140     """
 141     - two items, a ColWin and a Button, vertically
 142     - the Button is either left/right aligned or centered
 143     - comment / uncomment for testing the Button alignment
 144     - wx.ALIGN_LEFT is the default value
 145     """
 146 
 147     def __init__(self, parent):
 148         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 149 
 150         wred = ColWin(self, wx.NewId(), wx.RED)
 151         b1 = wx.Button(self, wx.NewId(), 'button1', (-1, -1), wx.DefaultSize)
 152 
 153         b = 5
 154         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 155         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 156 
 157         #~ vsizer1.Add(b1, 0, wx.ALIGN_LEFT | wx.ALL, b)
 158         #~ vsizer1.Add(b1, 0, wx.ALIGN_RIGHT | wx.ALL, b)
 159         vsizer1.Add(b1, 0, wx.ALIGN_CENTER | wx.ALL, b)
 160         self.SetSizer(vsizer1)
 161 
 162 #-------------------------------------------------------------------
 163 
 164 class MyPanel_6(wx.Panel):
 165     """
 166     - three items, a ColWin and two Buttons
 167     - the Buttons are either left/right aligned or centered
 168     """
 169 
 170     def __init__(self, parent):
 171         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 172 
 173         wred = ColWin(self, wx.NewId(), wx.RED)
 174         b1 = wx.Button(self, wx.NewId(), '&OK', (-1, -1), wx.DefaultSize)
 175         b2 = wx.Button(self, wx.NewId(), '&Cancel', (-1, -1), wx.DefaultSize)
 176 
 177         b = 10
 178         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 179         hsizer1.Add(b1, 0)
 180         hsizer1.Add(b2, 0, wx.LEFT, b)
 181 
 182         b = 5
 183         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 184         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 185         vsizer1.Add(hsizer1, 0, wx.ALIGN_RIGHT | wx.ALL, b)
 186         #~ vsizer1.Add(hsizer1, 0, wx.ALIGN_CENTER | wx.ALL, b)
 187         #~ vsizer1.Add(hsizer1, 0, wx.ALIGN_LEFT | wx.ALL, b)
 188         self.SetSizer(vsizer1)
 189 
 190 #-------------------------------------------------------------------
 191 
 192 class MyPanel_7(wx.Panel):
 193     """
 194     - four items, a ColWin, two Buttons, and a StaticLine
 195     - the Buttons are either left/right aligned or centered
 196     - the height of the static line == 2, the wx.GROW flag specifies an
 197       horizontal expansion, since the StaticLine is in a vertical sizer
 198     """
 199     def __init__(self, parent):
 200         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 201 
 202         wred = ColWin(self, wx.NewId(), wx.RED)
 203         b1 = wx.Button(self, wx.NewId(), '&OK', (-1, -1), wx.DefaultSize)
 204         b2 = wx.Button(self, wx.NewId(), '&Cancel', (-1, -1), wx.DefaultSize)
 205         staline = wx.StaticLine(self, wx.NewId(), (-1, -1), (-1, 2), wx.LI_HORIZONTAL)
 206 
 207         b = 5
 208         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 209         hsizer1.Add(b1, 0)
 210         hsizer1.Add(b2, 0, wx.LEFT, b)
 211 
 212         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 213         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 214         vsizer1.Add(staline, 0, wx.GROW | wx.ALL, b)
 215         vsizer1.Add(hsizer1, 0, wx.ALIGN_RIGHT | wx.ALL, b)
 216         self.SetSizer(vsizer1)
 217 
 218 #-------------------------------------------------------------------
 219 
 220 class MyPanel_8(wx.Panel):
 221     """
 222     - 7 items, 2 ColWins and 5 Buttons
 223     - ColWins: one is sizable, the others not
 224     - Buttons at the right of the frame
 225     - something like a toolbar at the right
 226     """
 227 
 228     def __init__(self, parent):
 229         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 230 
 231         wred = ColWin(self, wx.NewId(), wx.RED)
 232         wwhite = ColWin(self, wx.NewId(), wx.WHITE)
 233 
 234         b1 = wx.Button(self, wx.NewId(), '1', (-1, -1), wx.DefaultSize)
 235         b2 = wx.Button(self, wx.NewId(), '2', (-1, -1), wx.DefaultSize)
 236         b3 = wx.Button(self, wx.NewId(), '3', (-1, -1), wx.DefaultSize)
 237         b4 = wx.Button(self, wx.NewId(), '4', (-1, -1), wx.DefaultSize)
 238         b5 = wx.Button(self, wx.NewId(), '5', (-1, -1), wx.DefaultSize)
 239 
 240         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 241         b = 3
 242         vsizer1.Add(wred, 1, wx.EXPAND | wx.BOTTOM, b)
 243         vsizer1.Add(wwhite, 0, wx.EXPAND, b)
 244 
 245         vsizer2 = wx.BoxSizer(wx.VERTICAL)
 246         b = 5
 247         vsizer2.Add(b1, 0, wx.BOTTOM, b)
 248         vsizer2.Add(b2, 0, wx.BOTTOM, b)
 249         vsizer2.Add(b3, 0, wx.BOTTOM, b)
 250         vsizer2.Add(b4, 0, wx.BOTTOM, b)
 251         vsizer2.Add(b5, 0, wx.BOTTOM, b)
 252 
 253         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 254         b = 10
 255         hsizer1.Add(vsizer1, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.BOTTOM, b)
 256         hsizer1.Add(vsizer2, 0, wx.EXPAND| wx.ALL, b)
 257 
 258         self.SetSizer(hsizer1)
 259 
 260 #-------------------------------------------------------------------
 261 
 262 class MyPanel_9(wx.Panel):
 263     """
 264     - 7 items, 2 ColWins and 5 Buttons
 265     - the ColWins are sizable
 266     - the Buttons have a fixed height and a default width
 267     - something like a toolbar at the top
 268     """
 269     def __init__(self, parent):
 270         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 271 
 272         wred = ColWin(self, wx.NewId(), wx.RED)
 273         wwhite = ColWin(self, wx.NewId(), wx.WHITE)
 274 
 275         h = 40
 276         b1 = wx.Button(self, wx.NewId(), '1', (-1, -1), (-1, h))
 277         b2 = wx.Button(self, wx.NewId(), '2', (-1, -1), (-1, h))
 278         b3 = wx.Button(self, wx.NewId(), '3', (-1, -1), (-1, h))
 279         b4 = wx.Button(self, wx.NewId(), '4', (-1, -1), (-1, h))
 280         b5 = wx.Button(self, wx.NewId(), '5', (-1, -1), (-1, h))
 281 
 282         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 283         hsizer1.Add(b1, 0)
 284         hsizer1.Add(b2, 0)
 285         hsizer1.Add(b3, 0)
 286         hsizer1.Add(b4, 0)
 287         hsizer1.Add(b5, 0)
 288 
 289         b = 2
 290         hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
 291         hsizer2.Add(wred, 1, wx.EXPAND | wx.RIGHT, b)
 292         hsizer2.Add(wwhite, 1, wx.EXPAND | wx.LEFT, b)
 293 
 294         b = 5
 295         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 296         vsizer1.Add(hsizer1, 0, wx.EXPAND, b)
 297         vsizer1.Add(hsizer2, 1, wx.ALL | wx.EXPAND, b)
 298 
 299         self.SetSizer(vsizer1)
 300 
 301 #-------------------------------------------------------------------
 302 
 303 class MyPanel_10(wx.Panel):
 304     """
 305     - three ColWins in a StaticBoxSizer, vertically
 306     """
 307 
 308     def __init__(self, parent):
 309         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 310 
 311         wred = ColWin(self, wx.NewId(), wx.RED)
 312         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 313         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
 314 
 315         b = 10  #inside the staticbox
 316         vsbsizer1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'StaticboxSizer with a caption'), wx.VERTICAL)
 317         vsbsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 318         vsbsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 319         vsbsizer1.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 320         self.SetSizer(vsbsizer1)
 321 
 322 #-------------------------------------------------------------------
 323 
 324 class MyPanel_11(wx.Panel):
 325     """
 326     - three ColWins in a StaticBoxSizer, vertically
 327     - the StaticBoxSizer is in a sizer to enable a border
 328     """
 329 
 330     def __init__(self, parent):
 331         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 332 
 333         wred = ColWin(self, wx.NewId(), wx.RED)
 334         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 335         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
 336 
 337         b = 10  #inside the staticbox
 338         vsbsizer1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'StaticboxSizer with a caption'), wx.VERTICAL)
 339         vsbsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 340         vsbsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 341         vsbsizer1.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 342 
 343         b = 20
 344         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 345         hsizer1.Add(vsbsizer1, 1, wx.EXPAND | wx.ALL, b)
 346 
 347         self.SetSizer(hsizer1)
 348 
 349 #-------------------------------------------------------------------
 350 
 351 class MyPanel_12(wx.Panel):
 352     """
 353     - 5 ColWins, vertically
 354     - the ColWins 2 and 4 are in StaticBoxSizers
 355     """
 356     def __init__(self, parent):
 357         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 358 
 359         wred = ColWin(self, wx.NewId(), wx.RED)
 360         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 361         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
 362         wwhite = ColWin(self, wx.NewId(), wx.WHITE)
 363         wyellow = ColWin(self, wx.NewId(), wx.NamedColour('yellow'))
 364 
 365         b = 10
 366         vsbsizer1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'blue'), wx.VERTICAL)
 367         vsbsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 368 
 369         vsbsizer2 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'white'), wx.VERTICAL)
 370         vsbsizer2.Add(wwhite, 1, wx.EXPAND | wx.ALL, b)
 371 
 372         b = 5
 373         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 374         vsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 375         vsizer1.Add(vsbsizer1, 1, wx.EXPAND | wx.ALL, b)
 376         vsizer1.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 377         vsizer1.Add(vsbsizer2, 1, wx.EXPAND | wx.ALL, b)
 378         vsizer1.Add(wyellow, 1, wx.EXPAND | wx.ALL, b)
 379 
 380         self.SetSizer(vsizer1)
 381 
 382 #-------------------------------------------------------------------
 383 
 384 class MyPanel_13(wx.Panel):
 385     """
 386     - 3 StaticBoxSizers with each a ColWin
 387     - the StaticBoxSizers are arranged vertically
 388     """
 389 
 390     def __init__(self, parent):
 391         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 392 
 393         wred = ColWin(self, wx.NewId(), wx.NamedColour('green'))
 394         wgreen = ColWin(self, wx.NewId(), wx.NamedColour('red'))
 395         wblue = ColWin(self, wx.NewId(), wx.NamedColour('blue'))
 396 
 397         b = 10
 398         sizer1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'Staticbox'), wx.VERTICAL)
 399         sizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 400 
 401         sizer2 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'Staticbox'), wx.VERTICAL)
 402         sizer2.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 403 
 404         sizer4 = wx.StaticBoxSizer(wx.StaticBox(self, wx.NewId(), 'Staticbox'), wx.VERTICAL)
 405         sizer4.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 406 
 407         #tricky: the 2nd and 3rd staticbox sizer are shifted one pixel to the
 408         #left, try with b2 = 0
 409         b1, b2 = 0, -1
 410         sizer3 = wx.BoxSizer(wx.HORIZONTAL)
 411         sizer3.Add(sizer1, 1, wx.EXPAND, b1)
 412         sizer3.Add(sizer2, 1, wx.EXPAND | wx.LEFT, b2)
 413         sizer3.Add(sizer4, 1, wx.EXPAND | wx.LEFT, b2)
 414 
 415         self.SetSizer(sizer3)
 416 
 417 #-------------------------------------------------------------------
 418 
 419 class MyPanel_14(wx.Panel):
 420     """
 421     - 3 ColWins, horizontally, 2 spacers with a fixed height
 422     """
 423     def __init__(self, parent):
 424         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 425 
 426         wred = ColWin(self, wx.NewId(), wx.RED)
 427         wblue = ColWin(self, wx.NewId(), wx.BLUE)
 428         wgreen = ColWin(self, wx.NewId(), wx.GREEN)
 429 
 430         b = 0
 431         h = 20
 432         hsizer1 = wx.BoxSizer(wx.VERTICAL)
 433         hsizer1.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 434         hsizer1.Add((-1, h))
 435         hsizer1.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 436         hsizer1.Add((-1, h))
 437         hsizer1.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 438         self.SetSizer(hsizer1)
 439 
 440 #-------------------------------------------------------------------
 441 
 442 class MyPanel_15(wx.Panel):
 443     """
 444     - 4 items, a ColWin, 3 Buttons
 445     - Buttons 1 and 3 are left/right aligned, Button 2 is centered
 446     - use of spacers to set a gap between the Buttons.
 447     - better way?
 448     """
 449 
 450     def __init__(self, parent):
 451         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 452 
 453         wgreen = ColWin(self, wx.NewId(), wx.NamedColour('green'))
 454         b1 = wx.Button(self, wx.NewId(), 'button1', (-1, -1), wx.DefaultSize)
 455         b2 = wx.Button(self, wx.NewId(), 'button2', (-1, -1), wx.DefaultSize)
 456         b3 = wx.Button(self, wx.NewId(), 'button3', (-1, -1), wx.DefaultSize)
 457 
 458         b = 0
 459         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 460         hsizer1.Add(b1, 0, wx.ALL, b)
 461         hsizer1.Add((-1, -1), 1)
 462         hsizer1.Add(b2, 0, wx.ALL, b)
 463         hsizer1.Add((-1, -1), 1)
 464         hsizer1.Add(b3, 0, wx.ALL, b)
 465 
 466         #tip: this does not work
 467         #~ b = 0
 468         #~ hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 469         #~ hsizer1.Add(b1, 0, wx.ALIGN_LEFT, b)
 470         #~ hsizer1.Add(b2, 0, wx.ALIGN_CENTER, b)
 471         #~ hsizer1.Add(b3, 0, wx.ALIGN_RIGHT, b)
 472 
 473         b = 5
 474         vsizer2 = wx.BoxSizer(wx.VERTICAL)
 475         vsizer2.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 476         vsizer2.Add(hsizer1, 0, wx.EXPAND | wx.ALL, b)
 477         self.SetSizer(vsizer2)
 478 
 479 #-------------------------------------------------------------------
 480 
 481 class MyPanel_16(wx.Panel):
 482     """
 483     - 4 items, a ColWin, 3 Buttons
 484     - Buttons 1 and 3 are top/bottom aligned, Button 2 is centered
 485     - use of spacers to set a gap between the Buttons
 486     - better way?
 487     """
 488 
 489     def __init__(self, parent):
 490         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 491 
 492         wgreen = ColWin(self, wx.NewId(), wx.NamedColour('green'))
 493         b1 = wx.Button(self, wx.NewId(), 'button1', (-1, -1), wx.DefaultSize)
 494         b2 = wx.Button(self, wx.NewId(), 'button2', (-1, -1), wx.DefaultSize)
 495         b3 = wx.Button(self, wx.NewId(), 'button3', (-1, -1), wx.DefaultSize)
 496 
 497         b = 0
 498         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 499         vsizer1.Add(b1, 0, wx.ALL, b)
 500         vsizer1.Add((-1, -1), 1)
 501         vsizer1.Add(b2, 0, wx.ALL, b)
 502         vsizer1.Add((-1, -1), 1)
 503         vsizer1.Add(b3, 0, wx.ALL, b)
 504 
 505         b = 5
 506         hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
 507         hsizer2.Add(vsizer1, 0, wx.EXPAND | wx.ALL, b)
 508         hsizer2.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
 509         self.SetSizer(hsizer2)
 510 
 511 #-------------------------------------------------------------------
 512 
 513 class MyPanel_17(wx.Panel):
 514     """
 515     - an input box
 516     """
 517 
 518     def __init__(self, parent):
 519         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 520         self.parent = parent
 521 
 522         s = 'abc' + os.linesep + 'def' + os.linesep + 'ghi'
 523         statxt = wx.StaticText(self, -1, s, (-1, -1), (-1, -1))
 524         txt = wx.TextCtrl(self, wx.NewId(), 'input', (-1, -1), (-1, -1))
 525         staline = wx.StaticLine(self, -1, (-1, -1), (-1, -1), wx.LI_HORIZONTAL)
 526 
 527         b1 = wx.Button(self, wx.NewId(), "&OK", (-1, -1), wx.DefaultSize)
 528         b2 = wx.Button(self, wx.NewId(), "&Cancel", (-1, -1), wx.DefaultSize)
 529 
 530         b = 10
 531         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 532         hsizer1.Add(b1, 0)
 533         hsizer1.Add(b2, 0, wx.LEFT, b)
 534 
 535         b = 5
 536         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 537         vsizer1.Add(statxt, 0, wx.GROW | wx.ALL, b)
 538         vsizer1.Add(txt, 0, wx.GROW | wx.ALL, b)
 539         vsizer1.Add(staline, 0, wx.GROW | wx.ALL, b)
 540         vsizer1.Add(hsizer1, 0, wx.ALIGN_RIGHT | wx.ALL, b)
 541         vsizer1.SetMinSize((300, -1))
 542         self.SetSizerAndFit(vsizer1)
 543 
 544         #the items are not sizable, once set, pass the fitted size to
 545         #the parent
 546         self.parent.SetClientSize(vsizer1.GetSize())
 547 
 548 #-------------------------------------------------------------------
 549 
 550 class MyPanel_18(wx.Panel):
 551     """
 552     - a message box
 553     """
 554 
 555     def __init__(self, parent):
 556         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 557         self.parent = parent
 558 
 559         s = 'This is a rather long message with.'
 560         s += (os.linesep + 'a lot of lines...')*20
 561 
 562         statxt = wx.StaticText(self, -1, s, (-1, -1), (-1, -1))
 563         staline = wx.StaticLine(self, -1, (-1, -1), (-1, -1), wx.LI_HORIZONTAL)
 564         b1 = wx.Button(self, wx.NewId(), "&OK", (-1, -1), wx.DefaultSize)
 565 
 566         b = 5
 567         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 568         vsizer1.Add(statxt, 1, wx.EXPAND | wx.ALL, b)
 569         vsizer1.Add(staline, 0, wx.GROW | wx.ALL, b)
 570         vsizer1.Add(b1, 0, wx.ALIGN_CENTER | wx.ALL, b)
 571         vsizer1.SetMinSize((200, -1))
 572         self.SetSizerAndFit(vsizer1)
 573 
 574         self.parent.SetClientSize(vsizer1.GetSize())
 575 
 576 #-------------------------------------------------------------------
 577 
 578 class MyPanel_19(wx.Panel):
 579     """
 580     - a serie of couples, StaticText-TextCtrl
 581     - Buttons ok and cancel
 582     """
 583 
 584     def __init__(self, parent):
 585         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 586         self.parent = parent
 587 
 588         lab1 = wx.StaticText(self, -1, 'hydrogen :', (-1, -1), (-1, -1), wx.ALIGN_RIGHT)
 589         lab2 = wx.StaticText(self, -1, 'tin :', (-1, -1), (-1, -1), wx.ALIGN_RIGHT)
 590         lab3 = wx.StaticText(self, -1, 'mendelevium :', (-1, -1), (-1, -1), wx.ALIGN_RIGHT)
 591         lab4 = wx.StaticText(self, -1, 'carbon :', (-1, -1), (-1, -1), wx.ALIGN_RIGHT)
 592         txt1 = wx.TextCtrl(self, -1, '', (-1, -1), (-1, -1))
 593         txt2 = wx.TextCtrl(self, -1, '', (-1, -1), (-1, -1))
 594         txt3 = wx.TextCtrl(self, -1, '', (-1, -1), (-1, -1))
 595         txt4 = wx.TextCtrl(self, -1, '', (-1, -1), (-1, -1))
 596         b1 = wx.Button(self, wx.NewId(), '&OK', (-1, -1), wx.DefaultSize)
 597         b2 = wx.Button(self, wx.NewId(), '&Cancel', (-1, -1), wx.DefaultSize)
 598         staline = wx.StaticLine(self, wx.NewId(), (-1, -1), (-1, 2), wx.LI_HORIZONTAL)
 599 
 600         b = 5
 601         w = 100
 602         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 603         hsizer1.Add(lab1, 0, wx.RIGHT, b)
 604         hsizer1.Add(txt1, 1, wx.GROW, b)
 605         hsizer1.SetItemMinSize(lab1, (w, -1))
 606 
 607         hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
 608         hsizer2.Add(lab2, 0, wx.RIGHT, b)
 609         hsizer2.Add(txt2, 1, wx.GROW, b)
 610         hsizer2.SetItemMinSize(lab2, (w, -1))
 611 
 612         hsizer3 = wx.BoxSizer(wx.HORIZONTAL)
 613         hsizer3.Add(lab3, 0, wx.RIGHT, b)
 614         hsizer3.Add(txt3, 1, wx.GROW, b)
 615         hsizer3.SetItemMinSize(lab3, (w, -1))
 616 
 617         hsizer4 = wx.BoxSizer(wx.HORIZONTAL)
 618         hsizer4.Add(lab4, 0, wx.RIGHT, b)
 619         hsizer4.Add(txt4, 1, wx.GROW, b)
 620         hsizer4.SetItemMinSize(lab4, (w, -1))
 621 
 622         hsizer5 = wx.BoxSizer(wx.HORIZONTAL)
 623         hsizer5.Add(b1, 0)
 624         hsizer5.Add(b2, 0, wx.LEFT, 10)
 625 
 626         b = 5
 627         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 628         vsizer1.Add(hsizer1, 0, wx.EXPAND | wx.ALL, b)
 629         vsizer1.Add(hsizer2, 0, wx.EXPAND | wx.ALL, b)
 630         vsizer1.Add(hsizer3, 0, wx.EXPAND | wx.ALL, b)
 631         vsizer1.Add(hsizer4, 0, wx.EXPAND | wx.ALL, b)
 632         vsizer1.Add(staline, 0, wx.GROW | wx.ALL, b)
 633         vsizer1.Add(hsizer5, 0, wx.ALIGN_RIGHT | wx.ALL, b)
 634 
 635         self.SetSizerAndFit(vsizer1)
 636         self.parent.SetClientSize(vsizer1.GetSize())
 637 
 638 #-------------------------------------------------------------------
 639 
 640 class MyPanel_20(wx.Panel):
 641     """
 642     - a FlexGridSizer
 643     - 4 ColWins as cells, all sizeable
 644     """
 645 
 646     def __init__(self, parent):
 647         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 648 
 649         wred = ColWin(self, -1, wx.RED)
 650         wblue = ColWin(self, -1, wx.BLUE)
 651         wwhite = ColWin(self, -1, wx.WHITE)
 652         wcyan = ColWin(self, -1, wx.CYAN)
 653 
 654         hgap, vgap = 0, 0
 655         nrows, ncols = 2, 2
 656         fgs = wx.FlexGridSizer(nrows, ncols, hgap, vgap)
 657 
 658         b = 5
 659         fgs.AddMany([(wred, 1, wx.EXPAND | wx.ALL, b),
 660                      (wblue, 1, wx.EXPAND | wx.ALL, b),
 661                      (wwhite, 1, wx.EXPAND | wx.ALL, b),
 662                      (wcyan, 1, wx.EXPAND | wx.ALL, b),
 663                     ])
 664 
 665         # or
 666         #~ fgs.Add(wred, 1, wx.EXPAND | wx.ALL, b)
 667         #~ fgs.Add(wblue, 1, wx.EXPAND | wx.ALL, b)
 668         #~ fgs.Add(wwhite, 1, wx.EXPAND | wx.ALL, b)
 669         #~ fgs.Add(wcyan, 1, wx.EXPAND | wx.ALL, b)
 670 
 671         #set all rows and cols sizable, try to comment / uncomment
 672         fgs.AddGrowableRow(0)
 673         fgs.AddGrowableRow(1)
 674         fgs.AddGrowableCol(0)
 675         fgs.AddGrowableCol(1)
 676 
 677         self.SetSizer(fgs)
 678 
 679 #-------------------------------------------------------------------
 680 
 681 class MyPanel_21(wx.Panel):
 682     """
 683     - a FlexgridSizer with 4 cells
 684     - cell (0, 0) is a column of 3 Buttons
 685     - cell (0, 1) is a ColWin
 686     - cell (1, 0) is empty
 687     - cell (1, 1) is a row of 3 Buttons
 688     """
 689 
 690     def __init__(self, parent):
 691         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 692 
 693         wwhite = ColWin(self, -1, wx.WHITE)
 694         b1 = wx.Button(self, -1, 'button1', (-1, -1), wx.DefaultSize)
 695         b2 = wx.Button(self, -1, 'button2', (-1, -1), wx.DefaultSize)
 696         b3 = wx.Button(self, -1, 'button3', (-1, -1), wx.DefaultSize)
 697         b4 = wx.Button(self, -1, 'button4', (-1, -1), wx.DefaultSize)
 698         b5 = wx.Button(self, -1, 'button5', (-1, -1), wx.DefaultSize)
 699         b6 = wx.Button(self, -1, 'button6', (-1, -1), wx.DefaultSize)
 700 
 701         b = 0
 702         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 703         hsizer1.Add(b1, 0, wx.ALL, b)
 704         hsizer1.Add((-1, -1), 1)
 705         hsizer1.Add(b2, 0, wx.ALL, b)
 706         hsizer1.Add((-1, -1), 1)
 707         hsizer1.Add(b3, 0, wx.ALL, b)
 708 
 709         b = 0
 710         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 711         vsizer1.Add(b4, 0, wx.ALL, b)
 712         vsizer1.Add((-1, -1), 1)
 713         vsizer1.Add(b5, 0, wx.ALL, b)
 714         vsizer1.Add((-1, -1), 1)
 715         vsizer1.Add(b6, 0, wx.ALL, b)
 716 
 717         hgap, vgap = 0, 0
 718         nrows, ncols = 2, 2
 719         fgs = wx.FlexGridSizer(nrows, ncols, hgap, vgap)
 720 
 721         b = 5
 722         fgs.AddMany([(vsizer1, 1, wx.EXPAND | wx.ALL, b),
 723                      (wwhite, 1, wx.EXPAND | wx.ALL, b),
 724                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 725                      (hsizer1, 1, wx.EXPAND | wx.ALL, b),
 726                     ])
 727 
 728         #really tricky ;-)
 729         fgs.AddGrowableRow(0)
 730         fgs.AddGrowableCol(1)
 731 
 732         self.SetSizer(fgs)
 733 
 734 #-------------------------------------------------------------------
 735 
 736 class MyPanel_22(wx.Panel):
 737     """
 738     - a FlexGridSizer of 9 cells (3x3) with 5 ColWins in cells and 4 empty cells
 739     """
 740 
 741     def __init__(self, parent):
 742         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 743 
 744         wwhite = ColWin(self, -1, wx.WHITE)
 745         wblue = ColWin(self, -1, wx.BLUE)
 746         wgreen = ColWin(self, -1, wx.GREEN)
 747         wcyan = ColWin(self, -1, wx.CYAN)
 748         wred = ColWin(self, -1, wx.RED)
 749 
 750         hgap, vgap = 0, 0
 751         nrows, ncols = 3, 3
 752         fgs = wx.FlexGridSizer(nrows, ncols, hgap, vgap)
 753 
 754         b = 5
 755         fgs.AddMany([(wwhite, 1, wx.EXPAND | wx.ALL, b),
 756                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 757                      (wblue, 1, wx.EXPAND | wx.ALL, b),
 758 
 759                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 760                      (wgreen, 1, wx.EXPAND | wx.ALL, b),
 761                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 762 
 763                      (wred, 1, wx.EXPAND | wx.ALL, b),
 764                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 765                      (wcyan, 1, wx.EXPAND | wx.ALL, b),
 766                     ])
 767 
 768         fgs.AddGrowableRow(0)
 769         fgs.AddGrowableRow(1)
 770         fgs.AddGrowableRow(2)
 771 
 772         fgs.AddGrowableCol(0)
 773         fgs.AddGrowableCol(1)
 774         fgs.AddGrowableCol(2)
 775 
 776         self.SetSizer(fgs)
 777 
 778 #-------------------------------------------------------------------
 779 
 780 class MyPanel_23(wx.Panel):
 781     """
 782     - a FlexGridSizer of 9 cells (3x3) with 4 ColWins in cells and 5 empty cells
 783     - rows 1 and 3 have a fixed size
 784     """
 785 
 786     def __init__(self, parent):
 787         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 788 
 789         h = 40
 790         wwhite = wx.Window(self, -1, (-1, -1), (-1, h), wx.SIMPLE_BORDER)
 791         wwhite.SetBackgroundColour(wx.WHITE)
 792         wblue = ColWin(self, -1, wx.BLUE)
 793         wgreen = ColWin(self, -1, wx.GREEN)
 794         wred = wx.Window(self, -1, (-1, -1), (-1, h), wx.SIMPLE_BORDER)
 795         wred.SetBackgroundColour(wx.RED)
 796 
 797         hgap, vgap = 0, 0
 798         nrows, ncols = 3, 3
 799         fgs = wx.FlexGridSizer(nrows, ncols, hgap, vgap)
 800 
 801         b = 5
 802         fgs.AddMany([((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 803                      (wwhite, 1, wx.EXPAND | wx.ALL, b),
 804                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 805 
 806                      (wblue, 1, wx.EXPAND | wx.ALL, b),
 807                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 808                      (wgreen, 1, wx.EXPAND | wx.ALL, b),
 809 
 810                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 811                      (wred, 1, wx.EXPAND | wx.ALL, b),
 812                      ((-1, -1), 1, wx.EXPAND | wx.ALL, b),
 813                     ])
 814 
 815         fgs.AddGrowableRow(1)
 816 
 817         fgs.AddGrowableCol(0)
 818         fgs.AddGrowableCol(1)
 819         fgs.AddGrowableCol(2)
 820 
 821         self.SetSizer(fgs)
 822 
 823 #-------------------------------------------------------------------
 824 
 825 class MyPanel_24(wx.Panel):
 826     """
 827     - this exemple is coming from one of my applications
 828     - in the real app, the white window is a drawing area and
 829       the five lower windows are StaticTexts with a defined
 830       font size. This is why I force a fixed height.
 831     """
 832 
 833     def __init__(self, parent):
 834         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 835         self.parent = parent
 836 
 837         #a menu for the beauty of the demo
 838         menu1 = wx.Menu()
 839         menu1.Append(101, '&aaa')
 840         menuBar = wx.MenuBar()
 841         menuBar.Append(menu1, '&File')
 842         self.parent.SetMenuBar(menuBar)
 843 
 844         wwhite = ColWin(self, -1, wx.WHITE)
 845         wblue = ColWin(self, -1, wx.BLUE)
 846         wgreen = ColWin(self, -1, wx.GREEN)
 847         wcyan = ColWin(self, -1, wx.CYAN)
 848         wred = ColWin(self, -1, wx.RED)
 849         wcoral = ColWin(self, -1, wx.NamedColour('coral'))
 850         staline = wx.StaticLine(self, -1, (-1, -1), (-1, 2), wx.LI_HORIZONTAL)
 851 
 852         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 853         b = 5
 854         vsizer1.Add(wblue, 1, wx.EXPAND | wx.BOTTOM, b)
 855         vsizer1.Add(wgreen, 1, wx.EXPAND)
 856 
 857         hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
 858         b = 5
 859         minhe = 100
 860         hsizer2.Add(wcoral, 2, wx.EXPAND | wx.RIGHT, b)
 861         hsizer2.Add(wcyan, 3, wx.EXPAND | wx.RIGHT, b)
 862         hsizer2.Add(wred, 3, wx.EXPAND | wx.RIGHT, b)
 863         hsizer2.Add(vsizer1, 2, wx.EXPAND, border=b)
 864         hsizer2.SetItemMinSize(wcoral, (-1, minhe))
 865         hsizer2.SetItemMinSize(wcyan, (-1, minhe))
 866         hsizer2.SetItemMinSize(wred, (-1, minhe))
 867         hsizer2.SetItemMinSize(vsizer1, (-1, minhe))
 868 
 869         vsizer3 = wx.BoxSizer(wx.VERTICAL)
 870         b = 5
 871         vsizer3.Add(staline, 0, wx.GROW | wx.ALL, 0)
 872         vsizer3.Add(wwhite, 1, wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, b)
 873         vsizer3.Add(hsizer2, 0, wx.EXPAND | wx.ALL, b)
 874 
 875         self.SetSizerAndFit(vsizer3)
 876 
 877 #-------------------------------------------------------------------
 878 
 879 class MyPanel_25(wx.Panel):
 880     """
 881     - this shows the relaton between the font size and the size of the
 882       widgets when sizers are used
 883     """
 884 
 885     def __init__(self, parent):
 886         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 887         self.parent = parent
 888 
 889         fs = 20
 890         self.SetFont(wx.Font(fs, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False))
 891 
 892         statxt1 = wx.StaticText(self, -1, 'one, two, three', (-1, -1), (-1, -1))
 893         statxt1.SetBackgroundColour(wx.WHITE)
 894         statxt2 = wx.StaticText(self, -1, 'eins, zwei, drei', (-1, -1), (-1, -1))
 895         statxt3 = wx.StaticText(self, -1, 'un, deux, trois', (-1, -1), (-1, -1))
 896         b1 = wx.Button(self, wx.NewId(), 'button1', (-1, -1), (-1, -1))
 897         b2 = wx.Button(self, wx.NewId(), 'button2', (-1, -1), (-1, -1))
 898 
 899         b = 5
 900         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
 901         hsizer1.Add(b1, 1, wx.EXPAND | wx.ALL, b)
 902         hsizer1.Add(b2, 1, wx.EXPAND | wx.ALL, b)
 903 
 904         vsizer1 = wx.BoxSizer(wx.VERTICAL)
 905         vsizer1.Add(statxt1, 0, wx.ALL, b)
 906         vsizer1.Add(statxt2, 0, wx.ALL, b)
 907         vsizer1.Add(statxt3, 0, wx.ALL, b)
 908         vsizer1.Add(hsizer1, 0, wx.ALL, b)
 909 
 910         self.SetSizerAndFit(vsizer1)
 911         self.parent.SetClientSize(vsizer1.GetSize())
 912 
 913 #-------------------------------------------------------------------
 914 
 915 class MyPanel_26(wx.Panel):
 916     """
 917     - a GridBagSizer of 4 cells (2x2)
 918     - Note: cell spanning is always specified
 919     - gbs.Add.__doc__ : Add(self, item, GBPosition pos,
 920                             GBSpan span=DefaultSpan, int flag=0,
 921                             int border=0, userData=None) -> wx.GBSizerItem
 922     """
 923 
 924     def __init__(self, parent):
 925         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 926 
 927         wwhite = ColWin(self, -1, wx.WHITE)
 928         wblue = ColWin(self, -1, wx.BLUE)
 929         wgreen = ColWin(self, -1, wx.GREEN)
 930         wred = ColWin(self, -1, wx.RED)
 931 
 932         vgap, hgap = 10, 20
 933         gbs = wx.GridBagSizer(vgap, hgap)
 934 
 935         b = 0
 936         gbs.Add(wwhite, (0, 0), (1, 1), wx.EXPAND | wx.ALL, b)
 937         gbs.Add(wblue, (0, 1), (1, 1), wx.EXPAND | wx.ALL, b)
 938         gbs.Add(wgreen, (1, 0), (1, 1), wx.EXPAND | wx.ALL, b)
 939         gbs.Add(wred, (1, 1), (1, 1), wx.EXPAND | wx.ALL, b)
 940 
 941         gbs.AddGrowableRow(0)
 942         gbs.AddGrowableRow(1)
 943         gbs.AddGrowableCol(0)
 944         gbs.AddGrowableCol(1)
 945 
 946         self.SetSizer(gbs)
 947 
 948 #-------------------------------------------------------------------
 949 
 950 class MyPanel_27(wx.Panel):
 951     """
 952     - a GridBagSizer of 9 cells (3x3)
 953     - Note: cell spanning is always specified
 954     - vgap and hgap define the space between the cells and not
 955       between the cells and the border of the panel/frame.
 956       This example creates a constant spacing for all cells.
 957 
 958     """
 959 
 960     def __init__(self, parent):
 961         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
 962 
 963         wwhite = ColWin(self, -1, wx.WHITE)
 964         wblue = ColWin(self, -1, wx.BLUE)
 965         wgreen = ColWin(self, -1, wx.GREEN)
 966         wred = ColWin(self, -1, wx.RED)
 967         wblack = ColWin(self, -1, wx.BLACK)
 968         wpink = ColWin(self, -1, wx.NamedColour('pink'))
 969         wyellow = ColWin(self, -1, wx.NamedColour('yellow'))
 970         wcyan = ColWin(self, -1, wx.NamedColour('cyan'))
 971         worange = ColWin(self, -1, wx.NamedColour('orange'))
 972 
 973         vgap = hgap = 10
 974         gbs = wx.GridBagSizer(vgap, hgap)
 975 
 976         b = vgap
 977         gbs.Add(wwhite, (0, 0), (1, 1), wx.EXPAND | wx.LEFT | wx.TOP, b)
 978         gbs.Add(wblue, (0, 1), (1, 1), wx.EXPAND | wx.TOP, b)
 979         gbs.Add(wgreen, (0, 2), (1, 1), wx.EXPAND | wx.RIGHT | wx.TOP, b)
 980 
 981         gbs.Add(wred, (1, 0), (1, 1), wx.EXPAND | wx.LEFT, b)
 982         gbs.Add(wblack, (1, 1), (1, 1), wx.EXPAND)
 983         gbs.Add(wpink, (1, 2), (1, 1), wx.EXPAND | wx.RIGHT, b)
 984 
 985         gbs.Add(wyellow, (2, 0), (1, 1), wx.EXPAND | wx.LEFT | wx.BOTTOM, b)
 986         gbs.Add(wcyan, (2, 1), (1, 1), wx.EXPAND | wx.BOTTOM, b)
 987         gbs.Add(worange, (2, 2), (1, 1), wx.EXPAND | wx.RIGHT | wx.BOTTOM, b)
 988 
 989         gbs.AddGrowableRow(0)
 990         gbs.AddGrowableRow(1)
 991         gbs.AddGrowableRow(2)
 992         gbs.AddGrowableCol(0)
 993         gbs.AddGrowableCol(1)
 994         gbs.AddGrowableCol(2)
 995 
 996         self.SetSizer(gbs)
 997 
 998 #-------------------------------------------------------------------
 999 
1000 class MyPanel_28(wx.Panel):
1001     """
1002     - a GridBagSizer of 9 cells (3x3)
1003     - Layout like MyPanel_27, uses a secondary sizer to get a border
1004     """
1005 
1006     def __init__(self, parent):
1007         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
1008 
1009         wwhite = ColWin(self, -1, wx.WHITE)
1010         wblue = ColWin(self, -1, wx.BLUE)
1011         wgreen = ColWin(self, -1, wx.GREEN)
1012         wred = ColWin(self, -1, wx.RED)
1013         wblack = ColWin(self, -1, wx.BLACK)
1014         wpink = ColWin(self, -1, wx.NamedColour('pink'))
1015         wyellow = ColWin(self, -1, wx.NamedColour('yellow'))
1016         wcyan = ColWin(self, -1, wx.NamedColour('cyan'))
1017         worange = ColWin(self, -1, wx.NamedColour('orange'))
1018 
1019         vgap = hgap = 10
1020         gbs = wx.GridBagSizer(vgap, hgap)
1021 
1022         b = 0
1023         gbs.Add(wwhite, (0, 0), (1, 1), wx.EXPAND, b)
1024         gbs.Add(wblue, (0, 1), (1, 1), wx.EXPAND, b)
1025         gbs.Add(wgreen, (0, 2), (1, 1), wx.EXPAND, b)
1026 
1027         gbs.Add(wred, (1, 0), (1, 1), wx.EXPAND, b)
1028         gbs.Add(wblack, (1, 1), (1, 1), wx.EXPAND)
1029         gbs.Add(wpink, (1, 2), (1, 1), wx.EXPAND, b)
1030 
1031         gbs.Add(wyellow, (2, 0), (1, 1), wx.EXPAND, b)
1032         gbs.Add(wcyan, (2, 1), (1, 1), wx.EXPAND, b)
1033         gbs.Add(worange, (2, 2), (1, 1), wx.EXPAND, b)
1034 
1035         gbs.AddGrowableRow(0)
1036         gbs.AddGrowableRow(1)
1037         gbs.AddGrowableRow(2)
1038         gbs.AddGrowableCol(0)
1039         gbs.AddGrowableCol(1)
1040         gbs.AddGrowableCol(2)
1041 
1042         b = vgap
1043         vsizer1 = wx.BoxSizer(wx.VERTICAL)
1044         vsizer1.Add(gbs, 1, wx.EXPAND | wx.ALL, b)
1045         self.SetSizer(vsizer1)
1046 
1047 #-------------------------------------------------------------------
1048 
1049 class MyPanel_29(wx.Panel):
1050     """
1051     - a GridBagSizer of 25 cells (5x5)
1052     - spanning
1053     - cell (1, 1) is empty
1054     - when spanning, cells ovelapping raises an error. This explains
1055       the commented lines for unused coloured windows.
1056     """
1057 
1058     def __init__(self, parent):
1059         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
1060 
1061         wwhite = ColWin(self, -1, wx.WHITE)
1062         #~ wblue = ColWin(self, -1, wx.BLUE)
1063         #~ wgreen = ColWin(self, -1, wx.GREEN)
1064         wred = ColWin(self, -1, wx.RED)
1065         wblack = ColWin(self, -1, wx.BLACK)
1066 
1067         wpink = ColWin(self, -1, wx.NamedColour('pink'))
1068         #~ wyellow = ColWin(self, -1, wx.NamedColour('yellow'))
1069         wcyan = ColWin(self, -1, wx.NamedColour('cyan'))
1070         worange = ColWin(self, -1, wx.NamedColour('orange'))
1071         wgold = ColWin(self, -1, wx.NamedColour('gold'))
1072 
1073         wtan = ColWin(self, -1, wx.NamedColour('tan'))
1074         wcoral = ColWin(self, -1, wx.NamedColour('coral'))
1075         #~ wplum = ColWin(self, -1, wx.NamedColour('plum'))
1076         wspringgreen = ColWin(self, -1, wx.NamedColour('spring green'))
1077         #~ wbrown = ColWin(self, -1, wx.NamedColour('brown'))
1078 
1079         wwheat = ColWin(self, -1, wx.NamedColour('wheat'))
1080         #~ wvioletred = ColWin(self, -1, wx.NamedColour('violet red'))
1081         #~ wgoldenrod = ColWin(self, -1, wx.NamedColour('goldenrod'))
1082         wpalegreen = ColWin(self, -1, wx.NamedColour('pale green'))
1083         #~ wyellowgreen = ColWin(self, -1, wx.NamedColour('yellow green'))
1084 
1085         wnavy = ColWin(self, -1, wx.NamedColour('navy'))
1086         wskyblue = ColWin(self, -1, wx.NamedColour('sky blue'))
1087         wmagenta = ColWin(self, -1, wx.NamedColour('magenta'))
1088         wkhaki = ColWin(self, -1, wx.NamedColour('khaki'))
1089         #~ wslateblue = ColWin(self, -1, wx.NamedColour('slate blue'))
1090 
1091         vgap = hgap = 10
1092         gbs = wx.GridBagSizer(vgap, hgap)
1093 
1094         b = 0
1095         gbs.Add(wwhite, (0, 0), (1, 3), wx.EXPAND | wx.ALL, b)
1096         #~ gbs.Add(wblue, (0, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1097         #~ gbs.Add(wgreen, (0, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1098         gbs.Add(wred, (0, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1099         gbs.Add(wblack, (0, 4), (1, 1), wx.EXPAND | wx.ALL, b)
1100 
1101         gbs.Add(wpink, (1, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1102         #~ gbs.Add(wyellow, (1, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1103         gbs.Add(wcyan, (1, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1104         gbs.Add(worange, (1, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1105         gbs.Add(wgold, (1, 4), (4, 1), wx.EXPAND | wx.ALL, b)
1106 
1107         gbs.Add(wtan, (2, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1108         gbs.Add(wcoral, (2, 1), (2, 2), wx.EXPAND | wx.ALL, b)
1109         #~ gbs.Add(wplum, (2, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1110         gbs.Add(wspringgreen, (2, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1111         #~ gbs.Add(wbrown, (2, 4), (1, 1), wx.EXPAND | wx.ALL, b)
1112 
1113         gbs.Add(wwheat, (3, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1114         #~ gbs.Add(wvioletred, (3, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1115         #~ gbs.Add(wgoldenrod, (3, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1116         gbs.Add(wpalegreen, (3, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1117         #~ gbs.Add(wyellowgreen, (3, 4), (1, 1), wx.EXPAND | wx.ALL, b)
1118 
1119         gbs.Add(wnavy, (4, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1120         gbs.Add(wskyblue, (4, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1121         gbs.Add(wmagenta, (4, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1122         gbs.Add(wkhaki, (4, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1123         #~ gbs.Add(wslateblue, (4, 4), (1, 1), wx.EXPAND | wx.ALL, b)
1124 
1125         gbs.AddGrowableRow(0)
1126         gbs.AddGrowableRow(1)
1127         gbs.AddGrowableRow(2)
1128         gbs.AddGrowableRow(3)
1129         gbs.AddGrowableRow(4)
1130         gbs.AddGrowableCol(0)
1131         gbs.AddGrowableCol(1)
1132         gbs.AddGrowableCol(2)
1133         gbs.AddGrowableCol(3)
1134         gbs.AddGrowableCol(4)
1135 
1136         self.SetSizer(gbs)
1137 
1138 #-------------------------------------------------------------------
1139 
1140 class MyPanel_30(wx.Panel):
1141     """
1142     - a GridBagSizer of 16 cells (4x4)
1143     """
1144 
1145     def __init__(self, parent):
1146         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
1147 
1148         wwhite = ColWin(self, -1, wx.WHITE)
1149         wblue = ColWin(self, -1, wx.BLUE)
1150         wgreen = ColWin(self, -1, wx.GREEN)
1151         wred = ColWin(self, -1, wx.RED)
1152 
1153         wpink = ColWin(self, -1, wx.NamedColour('pink'))
1154         wyellow = ColWin(self, -1, wx.NamedColour('yellow'))
1155         wcyan = ColWin(self, -1, wx.NamedColour('cyan'))
1156         worange = ColWin(self, -1, wx.NamedColour('orange'))
1157 
1158         wtan = ColWin(self, -1, wx.NamedColour('tan'))
1159         wcoral = ColWin(self, -1, wx.NamedColour('coral'))
1160         wplum = ColWin(self, -1, wx.NamedColour('plum'))
1161         wspringgreen = ColWin(self, -1, wx.NamedColour('spring green'))
1162 
1163         wwheat = ColWin(self, -1, wx.NamedColour('wheat'))
1164         wvioletred = ColWin(self, -1, wx.NamedColour('violet red'))
1165         wgoldenrod = ColWin(self, -1, wx.NamedColour('goldenrod'))
1166         wpalegreen = ColWin(self, -1, wx.NamedColour('pale green'))
1167 
1168         vgap = hgap = 10
1169         gbs = wx.GridBagSizer(vgap, hgap)
1170 
1171         b = 0
1172         gbs.Add(wwhite, (0, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1173         gbs.Add(wblue, (0, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1174         gbs.Add(wgreen, (0, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1175         gbs.Add(wred, (0, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1176 
1177         gbs.Add(wpink, (1, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1178         gbs.Add(wyellow, (1, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1179         gbs.Add(wcyan, (1, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1180         gbs.Add(worange, (1, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1181 
1182         gbs.Add(wtan, (2, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1183         gbs.Add(wcoral, (2, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1184         gbs.Add(wplum, (2, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1185         gbs.Add(wspringgreen, (2, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1186 
1187         gbs.Add(wwheat, (3, 0), (1, 1), wx.EXPAND | wx.ALL, b)
1188         gbs.Add(wvioletred, (3, 1), (1, 1), wx.EXPAND | wx.ALL, b)
1189         gbs.Add(wgoldenrod, (3, 2), (1, 1), wx.EXPAND | wx.ALL, b)
1190         gbs.Add(wpalegreen, (3, 3), (1, 1), wx.EXPAND | wx.ALL, b)
1191 
1192         gbs.AddGrowableRow(0)
1193         gbs.AddGrowableRow(1)
1194         #~ gbs.AddGrowableRow(2)
1195         gbs.AddGrowableRow(3)
1196         gbs.AddGrowableCol(0)
1197         gbs.AddGrowableCol(1)
1198         #~ gbs.AddGrowableCol(2)
1199         gbs.AddGrowableCol(3)
1200 
1201         self.SetSizer(gbs)
1202 
1203         #~ for e in dir(gbs):
1204             #~ print e
1205         print gbs.SetDimension.__doc__
1206 
1207 #-------------------------------------------------------------------
1208 
1209 class MyPanel_31(wx.Panel):
1210     """
1211     - based on MyPanel_15 where the central button has been replaced by
1212       an horizontal sizer conaining two buttons.
1213     """
1214 
1215     def __init__(self, parent):
1216         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
1217 
1218         wgreen = ColWin(self, wx.NewId(), wx.NamedColour('green'))
1219         b1 = wx.Button(self, wx.NewId(), 'button1', (-1, -1), wx.DefaultSize)
1220         b2 = wx.Button(self, wx.NewId(), 'button2', (-1, -1), wx.DefaultSize)
1221         b3 = wx.Button(self, wx.NewId(), 'button3', (-1, -1), wx.DefaultSize)
1222         b4 = wx.Button(self, wx.NewId(), 'button4', (-1, -1), wx.DefaultSize)
1223 
1224         b = 0
1225         hsizer1a = wx.BoxSizer(wx.HORIZONTAL)
1226         hsizer1a.Add(b2, 0, wx.ALL, b)
1227         hsizer1a.Add(b3, 0, wx.ALL, b)
1228 
1229         b = 0
1230         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
1231         hsizer1.Add(b1, 0, wx.ALL, b)
1232         hsizer1.Add((-1, -1), 1)
1233         hsizer1.Add(hsizer1a, 0, wx.ALL, b)
1234         hsizer1.Add((-1, -1), 1)
1235         hsizer1.Add(b4, 0, wx.ALL, b)
1236 
1237         b = 0
1238         hsizer1b = wx.BoxSizer(wx.HORIZONTAL)
1239         hsizer1b.Add((-1, -1), 1)
1240         hsizer1b.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
1241         hsizer1b.Add((-1, -1), 1)
1242 
1243         b = 5
1244         vsizer2 = wx.BoxSizer(wx.VERTICAL)
1245         vsizer2.Add(hsizer1, 0, wx.EXPAND | wx.ALL, b)
1246         #~ vsizer2.Add(wgreen, 1, wx.EXPAND | wx.ALL, b)
1247         vsizer2.Add(hsizer1b, 1, wx.EXPAND | wx.ALL, b)
1248         self.SetSizer(vsizer2)
1249 
1250 #-------------------------------------------------------------------
1251 
1252 class TestComboBox(wx.Panel):
1253     def __init__(self, parent, id):
1254         wx.Panel.__init__(self, parent, id)
1255 
1256         sampleList = []
1257         for i in range(0, 32):
1258             sampleList.append('MyPanel_' + str(i))
1259 
1260         self.st = wx.StaticText(self, -1, "Select the example you want to see."
1261                          "Then click the View button.", (-1, -1))
1262 
1263         self.doctxt = wx.StaticText(self, -1, "")
1264         self.doctxt.SetLabel(MyPanel_0.__doc__)
1265 
1266         # This combobox is created with a preset list of values.
1267         self.cb = wx.ComboBox(self, -1, "MyPanel_0", (-1, -1),
1268             (-1, -1), sampleList, wx.CB_DROPDOWN | wx.CB_READONLY
1269             )
1270 
1271         self.stline = wx.StaticLine(self, -1, (-1, -1), (-1, 2), wx.LI_HORIZONTAL)
1272 
1273         btnView = wx.Button(self, -1, "&View")
1274         self.Bind(wx.EVT_BUTTON, self.OnClickView, btnView)
1275 
1276         btnExit = wx.Button(self, -1, "E&xit")
1277         self.Bind(wx.EVT_BUTTON, self.OnClickExit, btnExit)
1278 
1279         b = 5
1280         vsizer1 = wx.BoxSizer(wx.VERTICAL)
1281         vsizer1.Add(self.st, 0, wx.EXPAND | wx.ALL, b)
1282         vsizer1.Add(self.cb, 0, wx.EXPAND | wx.ALL, 0)
1283         vsizer1.Add(self.doctxt, 0, wx.EXPAND | wx.ALL, b)
1284 
1285         hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
1286         hsizer1.Add(btnView, 0)
1287         hsizer1.Add(btnExit, 0, wx.LEFT, b)
1288 
1289         vsizer2 = wx.BoxSizer(wx.VERTICAL)
1290         vsizer2.Add(vsizer1, 5, wx.EXPAND | wx.ALL, 0)
1291         vsizer2.Add(self.stline, 0, wx.GROW | wx.ALL, b)
1292         vsizer2.Add(hsizer1, 1, wx.ALIGN_RIGHT | wx.ALL, b)
1293         self.SetSizer(vsizer2)
1294 
1295         self.Bind(wx.EVT_COMBOBOX, self.OnEvtComboBox, self.cb)
1296 
1297     #~ Based on Tim Roberts' proposal
1298     #~ Tim Roberts, timr@probo.com
1299     # When the user selects something, we go here.
1300     def OnEvtComboBox(self, evt):
1301         self.doctxt.SetLabel(eval('%s.__doc__' % evt.GetString()))
1302 
1303     def OnClickView(self, evt):
1304         win = wx.Frame(self, -1, self.cb.GetValue(), size=(500, 300),
1305                   style = wx.DEFAULT_FRAME_STYLE)
1306         eval('%s(win)' % self.cb.GetValue())
1307 
1308         win.CenterOnScreen()
1309         win.Show(True)
1310 
1311     def OnClickExit(self, evt):
1312         sys.exit()
1313 
1314 #-------------------------------------------------------------------
1315 
1316 class MyApp(wx.App):
1317 
1318     def OnInit(self):
1319         frame = wx.Frame(None, -1, __file__, (0, 0), (450, 300))
1320         frame.panel = TestComboBox(frame, -1)
1321         frame.Show(True)
1322         self.SetTopWindow(frame)
1323         return True
1324 
1325 #-------------------------------------------------------------------
1326 
1327 def main():
1328     app = MyApp(False)
1329     app.MainLoop()
1330 
1331 #-------------------------------------------------------------------
1332 
1333 if __name__ == "__main__" :
1334     main()
1335 
1336 #eof-------------------------------------------------------------------

LearnSizers3.py (last edited 2008-03-11 10:50:29 by localhost)