title: Setting a background image in wxpython
body: <p>I am having some confusing behavior in wxpython.  I just loaded the newest version (3.0.0.0) into a RHEL 6.4 with Python 2.6.6.</p>
  
  <p>Most things seem to work, but my previous code for running a gui with a background image fails.  All the buttons work, etc, but the background is just the default gray one.</p>
  
  <p>I tried tracking down the problem by running this minimal example from Mike Driscoll's python website (<a href="http://www.blog.pythonlibrary.org/2010/03/18/wxpython-putting-a-background-image-on-a-panel/" rel="nofollow">http://www.blog.pythonlibrary.org/2010/03/18/wxpython-putting-a-background-image-on-a-panel/</a>), and had the same problem with no background showing up other than the default gray one (I previously used his example on another machine with an older version of wxpython [2.8.12.1] with no problems):</p>
  
  <pre><code>import wx
  
  ########################################################################
  class MainPanel(wx.Panel):
      """"""
  
      #----------------------------------------------------------------------
      def __init__(self, parent):
          """Constructor"""
          wx.Panel.__init__(self, parent=parent)
          self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
          self.frame = parent
  
          sizer = wx.BoxSizer(wx.VERTICAL)
          hSizer = wx.BoxSizer(wx.HORIZONTAL)
  
          for num in range(4):
              label = "Button %s" % num 
              btn = wx.Button(self, label=label)
              sizer.Add(btn, 0, wx.ALL, 5)
          hSizer.Add((1,1), 1, wx.EXPAND)
          hSizer.Add(sizer, 0, wx.TOP, 100)
          hSizer.Add((1,1), 0, wx.ALL, 75) 
          self.SetSizer(hSizer)
          self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
  
      #----------------------------------------------------------------------
      def OnEraseBackground(self, evt):
          """
          Add a picture to the background
          """
          # yanked from ColourDB.py
          dc = evt.GetDC()
  
          if not dc:
              dc = wx.ClientDC(self)
              rect = self.GetUpdateRegion().GetBox()
              dc.SetClippingRect(rect)
          dc.Clear()
          bmp = wx.Bitmap("butterfly.jpg")
          dc.DrawBitmap(bmp, 0, 0)
  
  
  ########################################################################
  class MainFrame(wx.Frame):
      """"""
  
      #----------------------------------------------------------------------
      def __init__(self):
          """Constructor"""
          wx.Frame.__init__(self, None, size=(600,450))
          panel = MainPanel(self)
          self.Center()
  
  ########################################################################
  class Main(wx.App):
      """"""
  
      #----------------------------------------------------------------------
      def __init__(self, redirect=False, filename=None):
          """Constructor"""
          wx.App.__init__(self, redirect, filename)
          dlg = MainFrame()
          dlg.Show()
  
  #----------------------------------------------------------------------
  if __name__ == "__main__":
      app = Main()
      app.MainLoop()
  </code></pre>
  
  <p>Now, when I run this, I don't get any errors, but I determined that the function onEraseBackground never seems to run.  I don't know what is going wrong here; did wxpython 3.0.0.0 stop allowing this kind of image background setting procedure?</p>