title: wxpython refresh window on button press
body: <p>I have been having some trouble with my Python program. Basically, it is a very very simple file manager. </p>
  
  <p>I have been trying to get it to move between folders (user clicks a folder, program refreshes display and shows contents of folder). </p>
  
  <p>The problem I am having is that I cant seem to get the button to refresh the display and then fill it with the new folders and files when clicked. </p>
  
  <p>Here is the code I am using and it is on Linux.</p>
  
  <pre><code>import wx
  import fileBrowser
  
  class interface(wx.Frame):
  
      def __init__(self, parent, id):
          '''(object, int) --&gt; None
          Set up wx python in a frame and displays it and contents defined in this function on the screen.'''
  
          wx.Frame.__init__(self, parent, id, "Bronto", size = (800, 600))
          panel = wx.Panel(self)
          self.createPanels()
          contents = fileBrowser.print_items("/")
          wx.StaticText(panel, -1, "/", (50, 10))
          col = 50
          row = 50
          for items in contents:
              name       = items
              col, row   = self.makeIcons(panel, (800, 600), name, col, row)
  
      def makeIcons(self, panel, param, name, col, row):
          '''(object, object) --&gt; None
          Place a button on the window that uses an image as its icon.'''
  
          pic = wx.Image("folder.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap()
          self.button  = wx.BitmapButton(panel, -1, pic, pos = (col, row))
          wx.StaticText(panel, -1, name, (col + 10, row + 40))
          self.Bind(wx.EVT_BUTTON, self.displayContents, self.button)
          self.button.SetDefault()
  
          if(col &lt; 600):
              return col + 90, row
          else:
              col = 50
              return col, row + 80
  
  
      def createPanels(self):
          '''(object) --&gt; None
          Create and place both menu and status bars on the window.'''
  
          status     = self.CreateStatusBar()
          menubar    = wx.MenuBar()
          File       = wx.Menu()
          Edit       = wx.Menu()
  
          menubar.Append(File,"File")
          menubar.Append(Edit, "Edit")
          new = wx.MenuItem(File, 101, '&amp;New\tCtrl+N', 'Creates a new document')
          File.AppendItem(new)
          self.Bind(wx.EVT_MENU, self.NewApplication, id=101)
          self.SetMenuBar(menubar)
  
  
      def NewApplication(self, event):
          app = wx.PySimpleApp()
          frame = interface(parent = None, id =1)
  
          frame.Show()
          app.MainLoop()
  
  
      def displayContents(self, event):
          '''(event) --&gt; None
          Display the contents of the folder clicked on'''
  
  
  
          #self.panel.Destroy();
          #self.panel = wx.Panel(self)
          self.Refresh(True)
          contents = fileBrowser.print_items("/home")
          col = 50
          row = 50
          for items in contents:
              name       = items
              wx.Yield()
              col, row   = self.makeIcons(panel, (800, 600), name, col, row)
  
  if __name__ == "__main__":
      app = wx.PySimpleApp()
      frame = interface(parent = None, id =1)
  
      frame.Show()
      app.MainLoop()
  </code></pre>
  
  <p>And here is the fileBrower program (at the moment I only look at folders, but I will change it later)</p>
  
  <pre><code>import os
  import os.path
  
  def print_items(d):
      '''(str) -&gt; NoneType
      Print the list of files and directories in directory d, recursively,
      prefixing each with indentation.'''
  
      icons = []
      #print out the names of files and subdirectories
      for filename in os.listdir(d):
          subitem = os.path.join(d, filename)
          if os.path.isdir(subitem):
              print filename
              icons.append(filename)
  
      return icons
  </code></pre>
  
  <p>@pthonm: I added the code you suggested but it doesnt seem to update it with the new stuff (it does clear the window though)</p>
  
  <p>EDIT: Okay I almost have it working. I can get it to display the contents by using self.Refresh(True) but it only works if I dont use the self.panel.Destroy() method. So, any suggestions on how to get rid of the buttons and the text(see the displayContents method for what I added)?</p>
  
  <p>EDIT2: I got it to work. What I did was, I added this to my displayContents method. This probably isnt the best way to do this though.</p>
  
  <pre><code>def displayContents(self, event):
      '''(event) --&gt; None
      Display the contents of the folder clicked on'''
  
      self.panel.Destroy();
      self.panel = wx.Panel(self)
      self.createPanels()
      self.Update()
      wx.StaticText(self.panel, -1, location, (50, 10))
      contents = fileBrowser.print_items("/home/gum/Documents")
      col = 50
      row = 50
      for directory,name in contents.iteritems():
          col, row   = self.makeIcons(self.panel, (800, 600), name, col, row)
  </code></pre>