]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/GridBagSizer.py
2 import wx
# This module uses the new wx namespace
4 #----------------------------------------------------------------------
6 The wx.GridBagSizer is similar to the wx.FlexGridSizer except the items are explicitly positioned
7 in a virtual cell of the layout grid, and column or row spanning is allowed. For example, this
8 static text is positioned at (0,0) and it spans 7 columns.
12 class TestFrame(wx
.Frame
):
14 wx
.Frame
.__init
__(self
, None, -1, "wx.GridBagSizer")
15 p
= wx
.Panel(self
, -1)
16 p
.Bind(wx
.EVT_LEFT_DOWN
, self
.OnLeftDown
)
18 gbs
= self
.gbs
= wx
.GridBagSizer(5, 5)
20 gbs
.Add( wx
.StaticText(p
, -1, gbsDescription
),
21 (0,0), (1,7), wx
.ALIGN_CENTER | wx
.ALL
, 5)
23 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(1,0)"), (1,0) )
24 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(1,1)"), (1,1) )
25 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(2,0)"), (2,0) )
26 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(2,1)"), (2,1) )
28 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(3,2), span(1,2)\nthis row and col are growable", style
=wx
.TE_MULTILINE
),
29 (3,2), (1,2), flag
=wx
.EXPAND
)
31 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(4,3), span(3,1)", style
=wx
.TE_MULTILINE
),
32 (4,3), (3,1), wx
.EXPAND
)
34 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(5,4)"), (5,4), flag
=wx
.EXPAND
)
35 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(6,5)"), (6,5), flag
=wx
.EXPAND
)
36 gbs
.Add( wx
.TextCtrl(p
, -1, "pos(7,6)"), (7,6) )
38 moveBtn1
= wx
.Button(p
, -1, "Move this to (3,6)")
39 moveBtn2
= wx
.Button(p
, -1, "Move this to (3,6)");
40 gbs
.Add( moveBtn1
, (10,2) )
41 gbs
.Add( moveBtn2
, (10,3) )
43 hideBtn
= wx
.Button(p
, -1, "Hide this item -->")
44 gbs
.Add(hideBtn
, (12, 3))
46 hideTxt
= wx
.TextCtrl(p
, -1, "pos(12,4), size(150, -1)", size
= (150,-1))
47 gbs
.Add( hideTxt
, (12,4) )
49 showBtn
= wx
.Button(p
, -1, "<-- Show it again")
50 gbs
.Add(showBtn
, (12, 5))
52 self
.hideBtn
= hideBtn
53 self
.showBtn
= showBtn
54 self
.hideTxt
= hideTxt
56 self
.Bind(wx
.EVT_BUTTON
, self
.OnHideButton
, hideBtn
)
57 self
.Bind(wx
.EVT_BUTTON
, self
.OnShowButton
, showBtn
)
58 self
.Bind(wx
.EVT_BUTTON
, self
.OnMoveButton
, moveBtn1
)
59 self
.Bind(wx
.EVT_BUTTON
, self
.OnMoveButton
, moveBtn2
)
61 # Add a spacer at the end to ensure some extra space at the bottom
62 gbs
.Add((10,10), (14,7))
68 self
.SetClientSize(p
.GetSize())
71 def OnHideButton(self
, evt
):
72 self
.gbs
.Hide(self
.hideTxt
)
73 self
.hideBtn
.Disable()
78 def OnShowButton(self
, evt
):
79 self
.gbs
.Show(self
.hideTxt
)
81 self
.showBtn
.Disable()
85 def OnMoveButton(self
, evt
):
86 btn
= evt
.GetEventObject()
87 curPos
= self
.gbs
.GetItemPosition(btn
)
89 # if it's already at the "other" spot then move it back
91 self
.gbs
.SetItemPosition(btn
, self
.lastPos
)
92 btn
.SetLabel("Move this to (3,6)")
94 if self
.gbs
.CheckForIntersection( (3,6), (1,1) ):
96 wx.GridBagSizer will not allow items to be in the same cell as
97 another item, so this operation will fail. You will also get an assert
98 when compiled in debug mode.""",
99 "Warning", wx
.OK | wx
.ICON_INFORMATION
)
102 if self
.gbs
.SetItemPosition(btn
, (3,6)):
103 self
.lastPos
= curPos
104 btn
.SetLabel("Move it back")
105 except wx
.PyAssertionError
:
111 def OnLeftDown(self
, evt
):
112 pt
= evt
.GetPosition()
113 item
= self
.gbs
.FindItemAtPoint(pt
)
115 print "no item at", `pt`
117 print "item found: ", `item
.GetPos()`
, "--", `item
.GetSpan()`
120 #----------------------------------------------------------------------
122 def runTest(frame
, nb
, log
):
128 #----------------------------------------------------------------------
132 overview
= """<html><body>
133 <h2><center>wx.GridBagSizer</center></h2>
135 The wx.GridBagSizer is more or less a port of the the RowColSizer (that
136 has been in the wxPython.lib package for quite some time) to C++. It
137 allows items to be placed at specific layout grid cells, and items can
138 span across more than one row or column.
144 if __name__
== '__main__':
147 run
.main(['', os
.path
.basename(sys
.argv
[0])])