title: wxPython menu doesn't display image
body: <p>I am creating a menu and assigning images to menu items, sometime first item in menu doesn't display any image, I am not able to find the reason. I have tried to make a simple stand alone example and below is the code which does demonstrates the problem on my machine.
  I am using windows XP, wx 2.8.7.1 (msw-unicode)'</p>
  
  <pre><code>import wx
  
  def getBmp():
      bmp = wx.EmptyBitmap(16,16)
      return bmp
  
  class MyFrame(wx.Frame):
      def __init__(self):
          wx.Frame.__init__(self, style=wx.DEFAULT_FRAME_STYLE, parent=None)
  
          self.SetTitle("why New has no image?")
  
          menuBar = wx.MenuBar()
          fileMenu=wx.Menu()
          item = fileMenu.Append(wx.ID_NEW, "New")
          item.SetBitmap(getBmp())
          item = fileMenu.Append(wx.ID_OPEN, "Open")
          item.SetBitmap(getBmp())
          item = fileMenu.Append(wx.ID_SAVE, "Save")
          item.SetBitmap(getBmp())
          menuBar.Append(fileMenu, "File")
          self.SetMenuBar(menuBar) 
  
  
  app = wx.PySimpleApp()
  frame=MyFrame()
  frame.Show()
  app.SetTopWindow(frame)
  app.MainLoop()
  </code></pre>
  
  <p>So are you able to see the problem and what could be the reason for it?</p>
  
  <p><strong>Conclusion</strong>: Yes this is a official bug, I have created a simple Menu class to overcome this bug, using the trick given by "balpha" in selected answer</p>
  
  <p>It overrides each menu.Append method and sees if menu item with image is being added for first time, if yes creates a dummy item and deletes it later.</p>
  
  <p>This also adds feature/constraint so that instead of calling SetBitmap, you should pass bitmap as optional argument image</p>
  
  <pre><code>import wx
  
  class MockMenu(wx.Menu):
      """
      A custom menu class in which image param can be passed to each Append method
      it also takes care of bug http://trac.wxwidgets.org/ticket/4011
      """
  
      def __init__(self, *args, **kwargs):
          wx.Menu.__init__(self, *args, **kwargs)
          self._count = 0
  
      def applyBmp(self, unboundMethod, *args, **kwargs):
          """
          there is a bug in wxPython so that it will not display first item bitmap
          http://trac.wxwidgets.org/ticket/4011
          so we keep track and add a dummy before it and delete it after words
          may not work if menu has only one item
          """
  
          bmp = None
          if 'image' in kwargs:
              bmp = kwargs['image']
  
          tempitem = None
          # add temp item so it is first item with bmp 
          if bmp and self._count == 1:
              tempitem = wx.Menu.Append(self, -1,"HACK")
              tempitem.SetBitmap(bmp)
  
          ret = unboundMethod(self, *args, **kwargs)
          if bmp:
              ret.SetBitmap(bmp)
  
          # delete temp item
          if tempitem is not None:
              self.Remove(tempitem.GetId())
  
          self._lastRet = ret
          return ret
  
      def Append(self, *args, **kwargs):
          return self.applyBmp(wx.Menu.Append, *args, **kwargs)
  
      def AppendCheckItem(self, *args, **kwargs):
          return self.applyBmp(wx.Menu.AppendCheckItem, *args, **kwargs)
  
      def AppendMenu(self, *args, **kwargs):
          return self.applyBmp(wx.Menu.AppendMenu, *args, **kwargs)
  </code></pre>