X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5448935a303a319f34791e7f169beee9fc3ba802..34d71f81f4810c55092005c113039a8857422185:/wxPython/demo/SizedControls.py diff --git a/wxPython/demo/SizedControls.py b/wxPython/demo/SizedControls.py index 77f89ea680..63b237a3e7 100644 --- a/wxPython/demo/SizedControls.py +++ b/wxPython/demo/SizedControls.py @@ -1,6 +1,131 @@ import wx import wxaddons.sized_controls as sc +overview = """\ +

Sized Controls

+SizedControls is an addon library that attempts to simplify the +creation of sizer-based layouts. It adds the following classes: + +

SizedPanel

+ +This class automatically creates its own sizer (a vertical box sizer +by default) and automatically adds its children to the sizer. You can +change the SizedPanel's sizer type by calling +panel.SetSizerType(\"type\", [args]), where valid types are +\"horizontal\", \"vertical\", \"form\" (a 2-col flex grid sizer), and +\"grid\". Args include \"cols\" and \"rows\" attributes for +grids. This class also applies control borders that adhere to the +native platform's Human Interface Guidelines (HIG) on Win, GTK and +Mac. + +

SizedFrame and SizedDialog

+ +These classes automatically setup a SizedPanel which is appropriately +positioned and given appropriate borders in accordance with the +platform's HIGs. + +

Since controls are added to the parent's sizer upon creation, you +don't need to use sizer.Add or even create sizers yourself. You just +use SetSizerType() to change the sizer you want to use, and +control.SetSizerProps() to change the sizer properties of the +control. So as a result, code that used to look like this: + +
+... wx.Dialog init code...
+
+panel = wx.Panel(self, -1)
+b1 = wx.Button(panel, -1)
+b2 = wx.Button(panel, -1)
+t1 = wx.TextCtrl(panel, -1)
+b3 = wx.Button(panel, -1)
+
+sizer = wx.BoxSizer(wx.HORIZONTAL)
+sizer.Add(b1, 0, wx.ALL, 6)
+sizer.Add(b2, 0, wx.ALL, 6)
+sizer.Add(t1, 0, wx.EXPAND | wx.ALL, 6)
+sizer.Add(b3, 0, wx.ALL, 6)
+panel.SetSizer(sizer)
+
+dlgSizer = wx.BoxSizer()
+dlgSizer.Add(panel, 1, wx.EXPAND)
+self.SetSizer(dlgSizer)
+self.SetAutoLayout(True)
+
+... rest of dialog ...
+
+ +would now look like this: + +
+... wx.Dialog init code...
+
+panel = self.GetContentsPane()
+panel.SetSizerType(\"horizontal\")
+
+b1 = wx.Button(panel, -1)
+b2 = wx.Button(panel, -1)
+
+t1 = wx.TextCtrl(panel, -1)
+t1.SetSizerProps(expand=True)
+
+b3 = wx.Button(panel, -1)
+
+... rest of dialog ...
+
+ +and the latter example will adhere to HIG spacing guidelines on all platforms, +unlike the former example. Please check the demos for more complete and sophisticated examples of SizedControls +in action. + +

wx.Window.SetSizerProps Quick Reference

+ +

wx.Window.SetSizerProps(<props>)
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter Values Summary
expand True/FalseWhether or not the control should grow to fill free space if +free space is available.
proportion Number (typically 0-10)How much of the free space the control should take up. Note that this value is +relative to other controls, so a proportion of 2 means take up +'twice as much' space as controls with a proportion of 1.
halign "left", "center", "centre", "right"Determines horizontal alignment of control.
valign "top", "center", "centre", "bottom"Determines vertical alignment of control.
border Tuple: ([dirs], integer)Specifies amount of border padding to apply to specified directions.
+Example: (["left", "right"], 6) would add six pixels to left and right borders.
+Note that, unfortunately, +it is not currently possible to assign different border sizes to each direction.
minsize One of the following string values: "fixed", "adjust"Determines whether or not the minsize can be updated when the control's best size changes.
+""" + class FormDialog(sc.SizedDialog): def __init__(self, parent, id): sc.SizedDialog.__init__(self, None, -1, "SizedForm Dialog", @@ -54,7 +179,6 @@ class FormDialog(sc.SizedDialog): class ErrorDialog(sc.SizedDialog): def __init__(self, parent, id): sc.SizedDialog.__init__(self, parent, id, "Error log viewer", - wx.DefaultPosition, wx.Size(420, 340), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) # Always use self.GetContentsPane() - this ensures that your dialog @@ -64,7 +188,7 @@ class ErrorDialog(sc.SizedDialog): pane = self.GetContentsPane() # first row - self.listCtrl = wx.ListCtrl(pane, -1, style=wx.LC_REPORT) + self.listCtrl = wx.ListCtrl(pane, -1, size=(300, -1), style=wx.LC_REPORT) self.listCtrl.SetSizerProps(expand=True, proportion=1) self.ConfigureListCtrl() @@ -98,6 +222,35 @@ class ErrorDialog(sc.SizedDialog): self.listCtrl.SetColumnWidth(0, 100) self.listCtrl.SetColumnWidth(1, 280) + +class GridFrame(sc.SizedFrame): + def __init__(self, parent, id): + sc.SizedFrame.__init__(self, parent, id, "Grid Layout Demo Frame") + + pane = self.GetContentsPane() + pane.SetSizerType("grid", {"cols":3}) # 3-column grid layout + + # row 1 + wx.TextCtrl(pane, -1).SetSizerProps(halign="left") + wx.TextCtrl(pane, -1).SetSizerProps(halign="center") + wx.TextCtrl(pane, -1).SetSizerProps(halign="right") + + # row 2 + wx.TextCtrl(pane, -1).SetSizerProps(valign="center") + wx.TextCtrl(pane, -1).SetSizerProps(expand=True, proportion=1) + wx.TextCtrl(pane, -1).SetSizerProps(valign="center") + + # row 3 + wx.TextCtrl(pane, -1).SetSizerProps(halign="left") + wx.TextCtrl(pane, -1).SetSizerProps(halign="center") + wx.TextCtrl(pane, -1).SetSizerProps(halign="right") + + self.CreateStatusBar() # should always do this when there's a resize border + + self.Fit() + self.SetMinSize(self.GetSize()) + + #--------------------------------------------------------------------------- class TestPanel(wx.Panel): @@ -110,7 +263,10 @@ class TestPanel(wx.Panel): self.Bind(wx.EVT_BUTTON, self.OnFormButton, b) b2 = wx.Button(self, -1, "Sized Controls Error Dialog", (50,90)) - self.Bind(wx.EVT_BUTTON, self.OnErrorButton, b2) + self.Bind(wx.EVT_BUTTON, self.OnErrorButton, b2) + + b3 = wx.Button(self, -1, "Sized Controls Grid Layout Demo", (50,130)) + self.Bind(wx.EVT_BUTTON, self.OnGridButton, b3) def OnFormButton(self, evt): @@ -143,12 +299,18 @@ class TestPanel(wx.Panel): dlg.Destroy() + def OnGridButton(self, evt): + + dlg = GridFrame(self, -1) + dlg.CenterOnScreen() + + dlg.Show() + def runTest(frame, nb, log): win = TestPanel(nb, log) return win - if __name__ == "__main__": app = wx.PySimpleApp() dlg = FormDialog() - dlg.ShowModal() \ No newline at end of file + dlg.ShowModal()