import wx #---------------------------------------------------------------------- label1 = "Click here to show pane" label2 = "Click here to hide pane" btnlbl1 = "call Expand(True)" btnlbl2 = "call Expand(False)" class TestPanel(wx.Panel): def __init__(self, parent, log): self.log = log wx.Panel.__init__(self, parent, -1) title = wx.StaticText(self, label="wx.CollapsiblePane") title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD)) title.SetForegroundColour("blue") self.cp = cp = wx.CollapsiblePane(self, label=label1) self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, cp) self.MakePaneContent(cp.GetPane()) sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) sizer.Add(title, 0, wx.ALL, 25) sizer.Add(cp, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 25) self.btn = btn = wx.Button(self, label=btnlbl1) self.Bind(wx.EVT_BUTTON, self.OnToggle, btn) sizer.Add(btn, 0, wx.ALL, 25) def OnToggle(self, evt): self.cp.Collapse(self.cp.IsExpanded()) self.OnPaneChanged() def OnPaneChanged(self, evt=None): if evt: self.log.write('wx.EVT_COLLAPSIBLEPANE_CHANGED: %s' % evt.Collapsed) # redo the layout self.Layout() # and also change the labels if self.cp.IsExpanded(): self.cp.SetLabel(label2) self.btn.SetLabel(btnlbl2) else: self.cp.SetLabel(label1) self.btn.SetLabel(btnlbl1) self.btn.SetInitialSize() def MakePaneContent(self, pane): '''Just make a few controls to put on the collapsible pane''' nameLbl = wx.StaticText(pane, -1, "Name:") name = wx.TextCtrl(pane, -1, ""); addrLbl = wx.StaticText(pane, -1, "Address:") addr1 = wx.TextCtrl(pane, -1, ""); addr2 = wx.TextCtrl(pane, -1, ""); cstLbl = wx.StaticText(pane, -1, "City, State, Zip:") city = wx.TextCtrl(pane, -1, "", size=(150,-1)); state = wx.TextCtrl(pane, -1, "", size=(50,-1)); zip = wx.TextCtrl(pane, -1, "", size=(70,-1)); addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) addrSizer.AddGrowableCol(1) addrSizer.Add(nameLbl, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) addrSizer.Add(name, 0, wx.EXPAND) addrSizer.Add(addrLbl, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) addrSizer.Add(addr1, 0, wx.EXPAND) addrSizer.Add((5,5)) addrSizer.Add(addr2, 0, wx.EXPAND) addrSizer.Add(cstLbl, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) cstSizer = wx.BoxSizer(wx.HORIZONTAL) cstSizer.Add(city, 1) cstSizer.Add(state, 0, wx.LEFT|wx.RIGHT, 5) cstSizer.Add(zip) addrSizer.Add(cstSizer, 0, wx.EXPAND) border = wx.BoxSizer() border.Add(addrSizer, 1, wx.EXPAND|wx.ALL, 5) pane.SetSizer(border) #---------------------------------------------------------------------- def runTest(frame, nb, log): win = TestPanel(nb, log) return win #---------------------------------------------------------------------- overview = """