2011-09-07 2 views
3

J'essaie d'implémenter une icône dans la zone de notification pour mon application, mais j'ai deux problèmes. D'abord, bien que l'icône que j'utilise soit un .png avec un fond transparent, l'icône a un fond blanc laid. Deuxièmement, l'icône a un menu clic droit avec les options "Afficher" et "Fermer" mais pour des raisons inconnues, les deux disent "Ctrl-Q" à côté d'eux. Non seulement je ne l'ai pas spécifié, mais le combo de raccourcis ne fait rien.wxPython Icône de la barre d'état système

Voici le code que j'utilise. Il est presque directement soulevé de la documentation:

class SysTray(wx.TaskBarIcon): 

def __init__(self, parent, icon, text): 
    wx.TaskBarIcon.__init__(self) 
    self.parentApp = parent 
    self.SetIcon(icon, text) 
    self.CreateMenu() 

def CreateMenu(self): 
    self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.ShowMenu) 
    self.menu=wx.Menu() 
    self.menu.Append(wx.ID_OPEN, "Show") 
    self.menu.Append(wx.ID_EXIT, "Close") 

def ShowMenu(self,event): 
    self.PopupMenu(self.menu) 

Ce qui est mis en œuvre à l'aide:

self.trayicon = SysTray(self, wx.Icon(TRAY_ICON, wx.BITMAP_TYPE_PNG), TRAY_TOOLTIP) 
    self.trayicon.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) 
    self.trayicon.Bind(wx.EVT_MENU, self.OnShow, id=wx.ID_OPEN) 
+0

Le passage de fichiers PNG à XPM a résolu le problème de transparence. Cependant, je vois encore CTRL-Q, mais cela peut être dû à mon environnement de bureau. Je l'ai testé sur Arch et Gentoo en LXDE. Je vais démarrer une VM et essayer avec un environnement différent. –

+2

Ma conjecture est que c'est probablement wx.ID_OPEN et wx.ID_EXIT, mais j'attendrais Ctrl + O et Ctrl + Q. – Fenikso

Répondre

0

wxPython utilise ce qu'on appelle un AcceleratorTable pour garder la trace des « raccourcis clavier » ou « raccourcis » ou tout ce que vous souhaitez les appeler. De la même manière que vous pouvez définir et définir un dimensionnement, vous pouvez définir et définir un AcceleratorTable et wxPython l'utilisera. Plus sur cela ici http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/

Aussi, afin d'obtenir les raccourcis Ctrl-Q ou Ctrl-O vous devez soit les spécifier dans le texte ou les ajouter à la table d'accélérateur. Si vous ajoutez le texte correctement formaté aux éléments de menu, wxPython devrait reconnaître "ceci est un raccourci clavier" et l'ajouter automatiquement à la table d'accélérateur.

self.menu.Append(wx.ID_OPEN, "Show\tCtrl+O") 
self.menu.Append(wx.ID_EXIT, "Close\tCtrl+Q") 
Questions connexes