2010-05-29 5 views
4

J'écris une application wxPython qui reste ouverte après la fermeture de toutes ses fenêtres - donc vous pouvez toujours faire glisser & déposer de nouveaux fichiers sur l'icône du dock OSX (je fais cela avec myApp.SetExitOnFrameDelete(False)). Malheureusement, si je ferme toutes les fenêtres, la barre de menu OSX ne contiendra qu'un menu "Aide". Je voudrais ajouter au moins un élément de menu Fichier/Ouvrir, ou simplement garder la barre de menu de la fenêtre principale. Est-ce que c'est en quelque sorte possible dans wxPython?Comment modifier la barre de menus OSX dans wxPython sans fenêtre ouverte?

En fait, je serais également satisfait d'un hack non-wxPython (par exemple, en définissant le menu dans pyobjc, mais en exécutant le reste de l'interface graphique dans wxPython). le développement de wxPython dans OSX est quand même un hack;)

MISE À JOUR: J'ai réussi à résoudre ce problème en utilisant le conseil de Lyndsey Ferguson. Voici ce que j'ai fait:

  • Au démarrage, je crée une fenêtre que je montre et cache immédiatement. J'ai placé sa position à (-10000,-10000) afin qu'il ne scintille pas sur l'écran (aargh, quel sale bidouille!)
  • Je crée un gestionnaire d'événement vide EVT_CLOSE dans cette fenêtre de sorte qu'il ne peut pas être fermé.
  • Il semble que détruire une fenêtre réinitialise le menu OSX, mais ne le cache pas ... Alors quand la dernière fenêtre est fermée, j'ai besoin d'afficher et de masquer cette fenêtre (cacher est nécessaire pour que l'utilisateur ne puisse pas basculer fenêtre en utilisant le menu Fenêtre ou Cmd-`)

Oui, c'est vraiment moche ... Je serai très reconnaissant si quelqu'un propose une solution plus jolie.

MISE À JOUR 2: En fait, il peut être résolu dans un moyen bien plus simple: si nous ne près la dernière fenêtre, seule cacher il. Et assurez-vous qu'il ne répond plus aux événements de menu.

+0

Oui, c'est un hack désagréable - mais cela fonctionne et vous permet de vous concentrer sur l'ajout des fonctionnalités dont vous avez besoin :) –

+1

Intéressant. J'ai utilisé le hack de la fenêtre cachée une fois mais j'ai mis les coordonnées au positif, au-delà de la résolution de l'écran (parce que Windows ou Linux ne gérait pas bien les négatifs). Bit moi quand un utilisateur multi-moniteur se plaignait qu'il y avait une fenêtre fictive sur son deuxième moniteur :) – fraca7

Répondre

1

Pouvez-vous créer une fenêtre cachée quelque part hors de l'écran? Il est un hack, mais je me souviens d'avoir à faire beaucoup de hacks pour faire mon travail d'application basée wxPython correctement sur Mac OS X.

Note: Vous devez désactiver le bouton de fermeture et mis en place que fenêtre cachée afin qu'il n'apparaisse pas dans le menu Fenêtre.

À côté: Avez-vous envisagé de factoriser votre partie GUI de votre application Python et d'utiliser PyObjC sous Mac OS X? Vous obtiendrez plus de comportements natifs ...

+0

C'est correct: la façon dont wxWidgets fonctionne (ou travaillait) est qu'une barre de menu avait besoin d'un cadre à attacher (pensez Windows) . Maintenant, les versions ultérieures de wxWidgets framework (2.9, par exemple) pourraient avoir corrigé ce problème, donc vous pouvez associer une barre de menu à l'application ... mais je ne sais pas si cela est disponible dans wxPython land – RyanWilcox

+0

Merci pour la pointe!Cette fenêtre cachée est une bonne idée, même si elle a besoin de plus de hacking (voir ci-dessus) ... Et oui, j'ai l'intention de laisser tomber wxPython (ça suce toutes les plateformes d'une manière différente), mais pour le moment je ne sais pas avoir le temps d'écrire l'interface graphique deux fois. – gyim

Questions connexes