То, как я это делаю, выглядит так:
В методе __init__
установите обработчики для события wx.EVT_CLOSE
и пункт меню, который является вашей "реальной" опцией выхода. Вам это нужно, или вы никогда не сможете закрыть свою программу.
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
Вы также должны убедиться, что в __init__
вы вызываете wx.App.SetMacExitMenuItemId( [ID OF YOUR EXIT MENU ITEM HERE] )
, чтобы пункт выхода в контекстном меню вашего док-станции перенаправлялся на ваш правильный обработчик меню.
Это дает вам хорошую скрытность, когда окно закрыто. Вы должны знать, что приложение все еще работает и его меню можно вызвать, так как строка меню все еще находится в верхней части экрана. Ваши друзья здесь - стратегические вызовы self.Show()
в обработчиках событий меню.
Вы также можете эффективно использовать wx.TaskBarIcon для удобного взаимодействия с док-станцией, когда окно вашего приложения скрыто (например, нажмите на док-станцию, чтобы переоткрыть окно).