2010-01-06 4 views
1

Je suis en train de concevoir une application que je veux exécuter en arrière-plan. Il n'y a pas d'interaction de l'utilisateur nécessaire, donc je veux que l'application s'exécute de manière invisible pour une icône de la barre des tâches. Je veux que cette icône ait un menu qui ouvre juste les fichiers de configuration/aide dans le bloc-notes. Quelqu'un pourrait-il me diriger dans la bonne direction ou donner un exemple?wxpython systray icône menu

Répondre

3

Avez-vous envisagé d'exécuter cette application en tant que service Windows? De nombreux utilisateurs considèrent une icône de la barre d'état système avec peu ou pas de fonctionnalités comme une nuisance. Vous pouvez toujours fournir des liens vers des fichiers d'aide/de configuration en tant qu'entrée du menu Démarrer.

Le python win32 extensions package doit prendre en charge les services python.

Bien sûr, il existe toujours des raisons pour lesquelles vous souhaiterez peut-être l'utiliser comme icône de la barre d'état système. Je suis désolé de ne pas avoir d'expérience avec ça.

5

Vous pouvez probablement le faire plus proprement mais j'ai utilisé quelques exemples il y a quelques temps j'ai été capable de créer moi-même une classe pour gérer la construction de base d'une icône de la barre des tâches.

TaskBarIcon.py

import wx 


ID_SHOW_OPTION = wx.NewId() 
ID_EDIT_OPTION = wx.NewId() 


class Icon(wx.TaskBarIcon): 

    def __init__(self, parent, icon, tooltip): 
     wx.TaskBarIcon.__init__(self) 
     self.SetIcon(icon, tooltip) 
     self.parent = parent 
     self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnLeftDClick) 
     self.CreateMenu() 

    def CreateMenu(self): 
     self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnPopup) 
     self.menu = wx.Menu() 
     self.menu.Append(ID_SHOW_OPTION, '&Show Option 1') 
     self.menu.Append(ID_EDIT_OPTION, '&Edit Option 2') 
     self.menu.AppendSeparator() 
     self.menu.Append(wx.ID_EXIT, 'E&xit') 

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

    def OnLeftDClick(self, event): 
     if self.parent.IsIconized(): 
      self.parent.Iconize(False) 
     if not self.parent.IsShown(): 
      self.parent.Show(True) 
     self.parent.Raise() 

Dans init() Frame , ajoutez les deux lignes ci-dessous:

self.TrayIcon = tbi.Icon(self, wx.Icon("C:\\YourIcon.png", wx.BITMAP_TYPE_PNG), "ToolTip Help Text Here") 
self.Bind(wx.EVT_ICONIZE, self.OnIconify) 

Et maintenant, il suffit d'ajouter cette fonction à votre image et vous devez être réglé :

def OnIconify(self, event): 
    self.Hide() 

N'oubliez pas de modifier les éléments de l'icône c jeune fille en fonction de vos besoins.

Questions connexes