pythonmacoswxpythonpyobjc

How to change the OSX menubar in wxPython without any opened window?


I am writing a wxPython application that remains open after closing all of its windows - so you can still drag & drop new files onto the OSX dock icon (I do this with myApp.SetExitOnFrameDelete(False)).

Unfortunately if I close all the windows, the OSX menubar will only contain a "Help" menu. I would like to add at least a File/Open menu item, or just keep the menubar of the main window. Is this somehow possible in wxPython?

In fact, I would be happy with a non-wxPython hack as well (for example, setting the menu in pyobjc, but running the rest of the GUI in wxPython). wxPython development in OSX is such a hack anyway ;)

UPDATE: I managed to solve this problem using the tip from Lyndsey Ferguson. Here's what I have done:

Yeah, this is really ugly... I will be very grateful if someone comes up with a prettier solution.

UPDATE 2: Actually it can be solved in a much easier way: if we do not close the last window, only hide it. And ensure that it does not respond to menu events anymore.


Solution

  • Can you create a hidden window that is offscreen somewhere? It is a hack, but I remember having to do a lot of hacks to make my wxPython-based application work correctly on Mac OS X.

    Note:You'll have to disable the close button and set up that hidden window so that it doesn't show up in the Window menu.

    Aside:Have you considered factoring out your GUI portion of your Python application and using PyObjC on Mac OS X? You'll get more native behaviours...