J'écris une application qui doit utiliser un indicateur. J'ai déjà utilisé PyGTK et GTK2 en référence à ce document: https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version
Cependant, cela ne fonctionne qu'avec PyGTK et GTK2. Les choses ont changé depuis et je dois trouver une bonne documentation, un tutoriel ou un bon exemple pour en apprendre plus sur son fonctionnement.
De plus, le document mentionné précédemment ne décrit absolument pas comment ajouter des sous-menus à un indicateur. J'espère que quelqu'un pourra nous éclairer à ce sujet, ainsi que sur la manière d'intégrer les indicateurs de catégorie si cela est fait avec le même outil.
Merci.
This est mon code d'essai pour gtk3 et son indicateur qui crée un indicateur pour GPaste .
Fondamentalement,
from gi.repository import AppIndicator3 as AppIndicator
afin d'utiliser appindicator pour les applications gtk3 fourni par le package gir1.2-appindicator3
.
Voici la documentation AppIndicator .
pygtk sera obsolète pour Gtk3 et vous devrez passer par GObject-Introspection pour développer des applications Gtk3 en python. Vous pouvez vous référer à documentation PyGObject . Au lieu de
import pygtk, gtk, gdk, gobject, pango
etc tu devrais faire
from gi.repository import Gtk, Gdk, Pango, GObject
Pour étudier un code de travail, vous pouvez voir Kazam qui est passé de gtk2 à gtk3 et utilise appindicator .
Il existe également un paquetage gir1.2-appindicator
qui semble identique à l'utilisation de python-appindicator
car ils fournissent tous deux une utilisation pour l'application gtk2 qui est:
from gi.repository import AppIndicator
OR
import appindicator
Quelques informations dans cet article de blog également.
Voici une application d'échafaudage simple et stupide qui a une fenêtre de configuration, une fenêtre principale et un indicateur d'application.
#!/usr/bin/env python3.3
from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator
class MyIndicator:
def __init__(self, root):
self.app = root
self.ind = appindicator.Indicator.new(
self.app.name,
"indicator-messages",
appindicator.IndicatorCategory.APPLICATION_STATUS)
self.ind.set_status (appindicator.IndicatorStatus.ACTIVE)
self.menu = Gtk.Menu()
item = Gtk.MenuItem()
item.set_label("Main Window")
item.connect("activate", self.app.main_win.cb_show, '')
self.menu.append(item)
item = Gtk.MenuItem()
item.set_label("Configuration")
item.connect("activate", self.app.conf_win.cb_show, '')
self.menu.append(item)
item = Gtk.MenuItem()
item.set_label("Exit")
item.connect("activate", self.cb_exit, '')
self.menu.append(item)
self.menu.show_all()
self.ind.set_menu(self.menu)
def cb_exit(self, w, data):
Gtk.main_quit()
class MyConfigWin(Gtk.Window):
def __init__(self, root):
super().__init__()
self.app = root
self.set_title(self.app.name + ' Config Window')
def cb_show(self, w, data):
self.show()
class MyMainWin(Gtk.Window):
def __init__(self, root):
super().__init__()
self.app = root
self.set_title(self.app.name)
def cb_show(self, w, data):
self.show()
class MyApp(Gtk.Application):
def __init__(self, app_name):
super().__init__()
self.name = app_name
self.main_win = MyMainWin(self)
self.conf_win = MyConfigWin(self)
self.indicator = MyIndicator(self)
def run(self):
Gtk.main()
if __== '__main__':
app = MyApp('Scaffold')
app.run()
Juste au cas où quelqu'un trouverait cela utile, j'ai créé un indicateur d'application minimal avec Python, GIR et GTK3. Il lit les vitesses du processeur dans/proc/cpuinfo toutes les quelques secondes et les affiche.
Voir ici: https://bitbucket.org/cpbotha/indicator-cpuspeed/src
Voici un exemple de lecture de la température du processeur. copier une icône nommée temp-icon.png/svg dans le répertoire du script
from gi.repository import Gtk, GLib
from gi.repository import AppIndicator3 as appindicator
import os
def cb_exit(w, data):
Gtk.main_quit()
def cb_readcputemp(ind_app):
# get CPU temp
fileh = open(
'/sys/devices/platform/thinkpad_hwmon/subsystem/devices/coretemp.0/temp1_input',
'r')
ind_app.set_label(fileh.read(2), '')
fileh.close()
return 1
ind_app = appindicator.Indicator.new_with_path (
"cputemp-indicator",
"temp-icon",
appindicator.IndicatorCategory.APPLICATION_STATUS,
os.path.dirname(os.path.realpath(__file__)))
ind_app.set_status (appindicator.IndicatorStatus.ACTIVE)
# create a menu
menu = Gtk.Menu()
menu_items = Gtk.MenuItem("Exit")
menu.append(menu_items)
menu_items.connect("activate", cb_exit, '')
menu_items.show()
ind_app.set_menu(menu)
GLib.timeout_add(500, cb_readcputemp, ind_app)
Gtk.main()