I was having some trouble getting a window to resize when the contained controls were shown or hidden. After some searching and experimentation, I found this sequence to work:


   def OnInit( self ):
        self.res   = wxXmlResource( GUI_FILENAME )
        self.frame = self.res.LoadFrame( None, GUI_MAINFRAME_NAME )
        self.frame.Show(1)
        self.showControls = XRCCTRL(self.frame, 'showControls')
        self.controlPanel = XRCCTRL(self.frame, 'controlPanel')
        self.Bind( EVT_TOGGLEBUTTON, self.OnChange, self.showControls)
        return 1

    def OnChange(self, event):
        sizer = self.frame.GetSizer()
        sizer.Show( self.controlPanel, show=self.showControls.GetValue(), recursive=true)
        size=sizer.GetMinSize()
        self.frame.SetMinSize(size)
        self.frame.Fit()

where gui.xrc is:


<?xml version="1.0" encoding="cp1252"?>
<resource>
  <object class="wxFrame" name="FRAME1">
    <title>Test</title>
    <centered>1</centered>
    <object class="wxBoxSizer">
      <orient>wxVERTICAL</orient>
      <object class="sizeritem">
        <object class="wxToggleButton" name="showControls">
          <label>Show Controls</label>
          <checked>1</checked>
        </object>
      </object>
      <object class="sizeritem">
        <object class="wxPanel" name="controlPanel">
          <object class="wxBoxSizer">
            <orient>wxHORIZONTAL</orient>
            <object class="sizeritem">
              <object class="wxStaticText" name="theLabel">
                <label>Label:</label>
              </object>
            </object>
            <object class="sizeritem">
              <object class="wxTextCtrl" name="theTextControl"/>
              <option>1</option>
            </object>
          </object>
        </object>
      </object>
    </object>
  </object>
</resource>

2/1 Update – had wrong app code in place