wx MenuItem - icon is missing
philip at semanchuk.com
Wed Jul 6 17:36:00 CEST 2011
On Jul 6, 2011, at 2:25 AM, Laszlo Nagy wrote:
>>> Under windows, this displays the icon for the popup menu item. Under GTK it doesn't and there is no error message, no exception.
>> I get different results than you.
>> Under Ubuntu 9.04 w with wx 126.96.36.199, when I right click I see a menu item called test with little icon of a calculator or something.
>> Under OS X 10.6 with wx 188.8.131.52 and Win XP with wx 184.108.40.206, when I right click I get this --
>> Traceback (most recent call last):
>> File "x.py", line 46, in onPopupMenu
>> item = wx.MenuItem(None,-1,u"Test")
>> File "/usr/local/lib/wxPython-unicode-220.127.116.11/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 11481, in __init__
>> _core_.MenuItem_swiginit(self,_core_.new_MenuItem(*args, **kwargs))
>> wx._core.PyAssertionError: C++ assertion "parentMenu != NULL" failed at /BUILD/wxPython-src-18.104.22.168/src/common/menucmn.cpp(389) in wxMenuItemBase(): menuitem should have a menu
> I guess I'll have to write to the wxPython mailing list. Seriously, adding a simple menu to something is supposed to be platform independent, but we got four different results on four systems. :-(
I can understand why it's frustrating but a menu items with icons on them aren't exactly common, so you're wandering into territory that's probably not so throughly explored (nor standard across platforms). Now that I think about it, I don't know that I've ever seen one under OSX, and I don't even know if it's supported at all.
Me, I would start by addressing the error in the traceback. wx doesn't seem happy with an orphan menu item; why not create a wx.Menu and assign the menu item to that? It might solve your icon problem; you never know.
In defense of wxPython, we have three wx apps in our project and they contain very little platform-specific code. To be fair, we've had to rewrite some code after we found that it worked on one platform but not another, but generally we're able to find code that works on all platforms. We have only a couple of places where we were forced to resort to this kind of thing:
if wx.Platform == "__WXGTK__":
elif wx.Platform == "__WXMAC__":
> Thank you for trying out though.
You're welcome. VirtualBox helped.
More information about the Python-list