Écriture d'indicateurs avec Python, GIR et GTK3

18

J'écris une application qui doit utiliser un indicateur. J'ai déjà utilisé PyGTK et GTK2 en référence à ce document: link

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.

En outre, 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.

    
posée Jo-Erlend Schinstad 26.02.2012 - 22:23
la source

4 réponses

19

Ce est mon code d'essai pour gtk3 et appindicator qui crée un indicateur pour GPaste .

Fondamentalement,

from gi.repository import AppIndicator3 as AppIndicator

pour utiliser appindicator pour les applications gtk3 fourni par le paquet gir1.2-appindicator3 .

Voici la AppIndicator3 documentation.

pygtk sera obsolète pour Gtk3 et vous devrez passer par GObject-Introspection pour développer des applications Gtk3 en python. Vous pouvez vous reporter à la documentation PyGObject . Au lieu de

import pygtk, gtk, gdk, gobject, pango  

etc. vous devriez faire

from gi.repository import Gtk, Gdk, Pango, GObject  

Pour étudier un code de travail, vous pouvez afficher Kazam , qui est passé de gtk2 à gtk3 et utilise appindicator3 .

Il existe également un package gir1.2-appindicator qui semble identique à l'utilisation de python-appindicator car ils fournissent tous les deux une utilisation pour l'application gtk2 qui est:

from gi.repository import AppIndicator

OU

import appindicator

Certaines informations figurent également dans ce billet de blog . .

    
réponse donnée sagarchalise 27.02.2012 - 16:35
la source
10

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 __name__ == '__main__':
  app = MyApp('Scaffold')
  app.run()
    
réponse donnée RobotHumans 23.01.2014 - 02:05
la source
9

Au cas où quelqu'un le jugerait 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: lien

    
réponse donnée Charl Botha 13.05.2012 - 17:17
la source
8

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()
    
réponse donnée Srivatsa Kanchi 29.05.2013 - 08:09
la source

Lire d'autres questions sur les étiquettes