title: wxPython problems with wrapping staticText
body: <p>A simplified version of the code is posted below (white space, comments, etc. removed to reduce size - but the general format to my program is kept roughly the same).</p>
  
  <p>When I run the script, the static text correctly wraps as it should, but the other items in the panel do not move down (they act as if the statictext is only one line and thus not everything is visible).</p>
  
  <p>If I manually resize the window/frame, even just a tiny amount, everything gets corrected, and displays as it is should.</p>
  
  <p>Why doesn't it display correctly to begin with? I've tried all sorts of combination's of <code>GetParent().Refresh()</code> or <code>Update()</code> and <code>GetTopLevelParent().Update()</code> or <code>Refresh()</code>. I've also tried everything I can think of but cannot get it to display correctly without manually resizing the frame/window. Once re-sized, it works exactly as I want it to.</p>
  
  <p>Information:</p>
  
  <ul>
  <li>Windows XP  </li>
  <li>Python 2.5.2  </li>
  <li>wxPython 2.8.11.0 (msw-unicode)</li>
  </ul>
  
  <p>My Code:</p>
  
  <pre><code>#! /usr/bin/python
  
  import wx
  
  class StaticWrapText(wx.PyControl):
     def __init__(self, parent, id=wx.ID_ANY, label='', pos=wx.DefaultPosition,
                  size=wx.DefaultSize, style=wx.NO_BORDER,
                  validator=wx.DefaultValidator, name='StaticWrapText'):
        wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name)
        self.statictext = wx.StaticText(self, wx.ID_ANY, label, style=style)
        self.wraplabel = label
        #self.wrap()
     def wrap(self):
        self.Freeze()
        self.statictext.SetLabel(self.wraplabel)
        self.statictext.Wrap(self.GetSize().width)
        self.Thaw()
     def DoGetBestSize(self):
        self.wrap()
        #print self.statictext.GetSize()
        self.SetSize(self.statictext.GetSize())
        return self.GetSize()
  
  class TestPanel(wx.Panel):
     def __init__(self, *args, **kwargs):
        # Init the base class
        wx.Panel.__init__(self, *args, **kwargs)
        self.createControls()
     def createControls(self):
        # --- Panel2 -------------------------------------------------------------
        self.Panel2 = wx.Panel(self, -1)
        msg1 =  'Below is a List of Files to be Processed'
        staticBox      = wx.StaticBox(self.Panel2, label=msg1)
        Panel2_box1_v1 = wx.StaticBoxSizer(staticBox, wx.VERTICAL)
        Panel2_box2_h1 = wx.BoxSizer(wx.HORIZONTAL)
        Panel2_box3_v1 = wx.BoxSizer(wx.VERTICAL)
  
        self.wxL_Inputs = wx.ListBox(self.Panel2, wx.ID_ANY, style=wx.LB_EXTENDED)
  
        sz = dict(size=(120,-1))
        wxB_AddFile    = wx.Button(self.Panel2, label='Add File',        **sz)
        wxB_DeleteFile = wx.Button(self.Panel2, label='Delete Selected', **sz)
        wxB_ClearFiles = wx.Button(self.Panel2, label='Clear All',       **sz)
        Panel2_box3_v1.Add(wxB_AddFile,    0, wx.TOP, 0)
        Panel2_box3_v1.Add(wxB_DeleteFile, 0, wx.TOP, 0)
        Panel2_box3_v1.Add(wxB_ClearFiles, 0, wx.TOP, 0)
  
        Panel2_box2_h1.Add(self.wxL_Inputs, 1, wx.ALL|wx.EXPAND, 2)
        Panel2_box2_h1.Add(Panel2_box3_v1,  0, wx.ALL|wx.EXPAND, 2)
  
        msg =  'This is a long line of text used to test the autowrapping '
        msg += 'static text message.  '
        msg += 'This is a long line of text used to test the autowrapping '
        msg += 'static text message.  '
        msg += 'This is a long line of text used to test the autowrapping '
        msg += 'static text message.  '
        msg += 'This is a long line of text used to test the autowrapping '
        msg += 'static text message.  '
        staticMsg = StaticWrapText(self.Panel2, label=msg)
  
        Panel2_box1_v1.Add(staticMsg,      0, wx.ALL|wx.EXPAND, 2)
        Panel2_box1_v1.Add(Panel2_box2_h1, 1, wx.ALL|wx.EXPAND, 0)
        self.Panel2.SetSizer(Panel2_box1_v1)
  
        # --- Combine Everything -------------------------------------------------
        final_vbox = wx.BoxSizer(wx.VERTICAL)
        final_vbox.Add(self.Panel2, 1, wx.ALL|wx.EXPAND, 2)
        self.SetSizerAndFit(final_vbox)
  
  class TestFrame(wx.Frame):
     def __init__(self, *args, **kwargs):
        # Init the base class
        wx.Frame.__init__(self, *args, **kwargs)
        panel = TestPanel(self)
        self.SetClientSize(wx.Size(500,500))
        self.Center()
  
  class wxFileCleanupApp(wx.App):
     def __init__(self, *args, **kwargs):
        # Init the base class
        wx.App.__init__(self, *args, **kwargs)
     def OnInit(self):
        # Create the frame, center it, and show it
        frame = TestFrame(None, title='Test Frame')
        frame.Show()
        return True
  
  if __name__ == '__main__':
     app = wxFileCleanupApp()
     app.MainLoop()
  </code></pre>