2016-06-21 9 views
3

Es ist possible, mit AppIndicator3 ein Taskleistensymbol mit einem Menü zu erstellen. Aber diese Lösung ist nicht tragbar. Zum Beispiel it doesn't work on FreeBSD seit es keine libappindicator3 auf diesem System gibt. Ich vermute, dass ein solcher Code auch unter Windows und MacOS nicht funktioniert.Python 3 & GTK3: Kreuztabellensymbol

Wie geht das Gleiche ohne AppIndicator3, damit Code auf allen (oder fast allen) Systemen funktioniert?

Antwort

4

Ok, ich denke, ich habe es herausgefunden. Die Idee ist, Gtk.StatusIcon zu Rückfall, wenn AppIndicator3 nicht verfügbar ist:

class TrayIcon: 

    def __init__(self, appid, icon, menu): 
     self.menu = menu 

     APPIND_SUPPORT = 1 
     try: 
      from gi.repository import AppIndicator3 
     except: 
      APPIND_SUPPORT = 0 

     if APPIND_SUPPORT == 1: 
      self.ind = AppIndicator3.Indicator.new(
       appid, icon, AppIndicator3.IndicatorCategory.APPLICATION_STATUS) 
      self.ind.set_status(AppIndicator3.IndicatorStatus.ACTIVE) 
      self.ind.set_menu(self.menu) 
     else: 
      self.ind = Gtk.StatusIcon() 
      self.ind.set_from_file(icon) 
      self.ind.connect('popup-menu', self.onPopupMenu) 

    def onPopupMenu(self, icon, button, time): 
     self.menu.popup(None, None, Gtk.StatusIcon.position_menu, icon, button, time) 

Arbeiten auf Linux + Unity, Linux + Xfce, FreeBSD + i3.

Siehe auch: