title: Update/Refresh Dynamically–Created WxPython Widgets
body: <p>New python programmer here and trying to learn how to dynamically update widgets. To start, I have the following code. What I would like to do is change my variable "self.dynamiclength" to any integer, and have WxPython update the number of widgets appropriately. I have tried putting self.Refresh() and self.Update() in my TestFrame after updating self.dynamiclength to no avail.</p>
  
  <p>I have done as much reading as possible on this before resorting to asking for help, but I am just too new at Wx to solve this one on my own. Thank you much!</p>
  
  <pre><code>import wx
  import  wx.lib.scrolledpanel as scrolled
  
  class TestFrame(wx.Frame):
      def __init__(self):
          wx.Frame.__init__(self, None, size=(1000, 550))
          panel = wx.Panel(self)
  
          mainSizer = wx.BoxSizer(wx.VERTICAL)
          pbox0 = wx.BoxSizer(wx.VERTICAL)
          controlback0 = wx.Button(panel, label="Back0")
          controlforward0 = wx.Button(panel, label="Forward0")
          pbox0.Add(controlback0, 0, wx.ALL)
          pbox0.Add(controlforward0, 0, wx.ALL)
          mainSizer.Add(pbox0)
  
          self.scrolling_window = scrolled.ScrolledPanel( panel )
          self.scrolling_window.SetAutoLayout(1)
          self.scrolling_window.SetupScrolling()
          self.sizer = wx.BoxSizer( wx.VERTICAL )
          self.child_windows = []
  
          ##############################################
          #this is the variable that I want to change, 
          #and I don't know how to get the 'for loop' 
          #below to update as well. 
  
          self.eedictionary = {}
          self.dynamiclength = 5
          for i in range(0,self.dynamiclength):
              wind = self.addBox(i)
              self.sizer.Add(wind, 0, wx.CENTER|wx.ALL, 5)
          ###############################################
          #the following code binds all appropriate buttons to a pedigree variable updater
          button_binding_list = ['controlback','controlforward']
          for j in button_binding_list:
              eid = self.eedictionary[str(i)+j]
              self.scrolling_window.Bind(wx.EVT_BUTTON, lambda evt: self.onclick(evt, id), id=eid)
  
          self.scrolling_window.SetSizer(self.sizer)
  
          mainSizer.Add(self.scrolling_window, 1, wx.EXPAND)
          panel.SetSizer(mainSizer)
  
      def addBox(self, i):
          pbox = wx.BoxSizer(wx.VERTICAL)
  
          controlback = wx.Button(self.scrolling_window, label="Back")
          controlforward = wx.Button(self.scrolling_window, label="Forward")
  
          pbox.AddMany([(controlback, 0, wx.ALL), (controlforward, 0, wx.ALL)])
  
          #for each object created in the addBox module, its id is added to the dictionary 
          self.eedictionary[str(i)+'controlback'] = controlback.GetId()
          self.eedictionary[str(i)+'controlforward'] = controlforward.GetId()
          return pbox
  
      def onclick(self, event):
          self.dynamiclength +=1
          print 'added one to self.dynamiclength', self.dynamiclength
  
  if __name__=='__main__':
      app = wx.App(False)
      f = TestFrame()
      f.Show()
      app.MainLoop()
  </code></pre>