2009-06-28 6 views
2

Je travaille sur une application pour osx en utilisant wxpython. Je veux réduire la fenêtre à la barre d'ancrage lorsque l'utilisateur clique sur le bouton de fermeture de la fenêtre afin qu'il puisse être restauré à partir de la barre d'ancrage. Comment puis je faire ça? Actuellement, j'ai un problème de restauration de la fenêtre car elle est détruite lorsque l'utilisateur clique sur le bouton de fermeture. comment puis-je empêcher cela?comment désactiver le bouton de fermeture de fenêtre dans OSX en utilisant wxpython?

Merci à l'avance

Répondre

0

Tu ne peux pas qu'affecter l'événement EVT_CLOSE et minimiser au lieu de fermer à l'aide de votre gestionnaire pour EVT_ICONIZE

... 
def __init__(self): 
    ... 
    self.Bind(wx.EVT_CLOSE, self.onCloseWindow) 
    ... 
def onCloseWindow(self, event): 
    ... do something else instead of closing ... 
... 
5

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).

Questions connexes