La façon dont je le fais est comme ceci:
Dans la méthode __init__
, configurez des gestionnaires pour l'événement wx.EVT_CLOSE
et un élément de menu qui est votre option de fermeture réelle. Vous en avez besoin ou vous ne pouvez jamais fermer votre programme.
def OnClose(self,evt):
#Turn closes into hides unless this is a quit application message/or OS shutting down
if evt.CanVeto():
self.Hide()
evt.Veto()
else:
#if we don't veto it we allow the event to propogate
evt.Skip()
def OnMenuExit(self,evt):
#Event handler for exit menu item
self.Close(force=True) #Stops the close handler vetoing it
Vous devez également vous assurer que vous appelez __init__
wx.App.SetMacExitMenuItemId([ID OF YOUR EXIT MENU ITEM HERE])
de telle sorte que le choix Quit dans vos itinéraires de menu contextuel de station d'accueil à votre gestionnaire de menu correct.
Cela vous donne une belle cachette mac-ish lorsque la fenêtre est fermée. Vous devez être conscient que l'application est toujours en cours d'exécution et que ses menus peuvent être appelés car la barre de menu est toujours en haut de l'écran. Appels stratégiques à self.Show()
dans les gestionnaires d'événements de menu sont votre ami ici. Vous pouvez également faire bon usage de wx.TaskBarIcon pour interagir avec le dock lorsque la fenêtre de votre application est cachée (par exemple, cliquez sur dock pour afficher la fenêtre).