Python et comment créer un applet gnome

by david

Aujourd’hui, on va voir comment on crée un applet gnome en python. C’est très simple
Dans cet article, on va juste créer un applet à  2 balles qui va afficher une citation(donc pensez à  installer fortune) via le système de notifications.

1. La partie 1

Il faut savoir qu’un applet gnome est un composant Bonobo, c’est pourquoi chaque applet doit avoir un fichier .server contenant des informations compréhensibles par le Bonobo.

Donc il ne nous reste plus qu’à  créer ce fichier :

$ su -c "vim /usr/lib/bonobo/servers/GNOME_PetitApplet.server" (ajustez le chemin selon votre archi/distrib)

Dedans, on va lui mettre à§a :

<oaf_info>
<oaf_server iid= »OAFIID:GNOME_PetitApplet_Factory » type= »exe » location= »/usr/libexec/petitApplet.py« >
<oaf_attribute name= »repo_ids » type= »stringv »>
<item value= »IDL:Bonobo/GenericFactory:1.0″/>
<item value= »IDL:Bonobo/Unknown:1.0″/>
</oaf_attribute>
</oaf_server>
<oaf_server iid= »OAFIID:GNOME_PetitApplet » type= »factory » location= »OAFIID:GNOME_PetitApplet_Factory« >
<oaf_attribute name= »repo_ids » type= »stringv »>
<item value= »IDL:GNOME/Vertigo/PanelAppletShell:1.0″/>
<item value= »IDL:Bonobo/Control:1.0″/>
<item value= »IDL:Bonobo/Unknown:1.0″/>
</oaf_attribute>
<oaf_attribute name= »name » type= »string » value= »Petit Applet »/>
<oaf_attribute name= »description » type= »string » value= »Petit Applet »/>
<oaf_attribute name= »panel:category » type= »string » value= »Utility »/>
<oaf_attribute name= »panel:icon » type= »string » value= »gnome-logo-icon-transparent.png »/></oaf_server>

</oaf_info>

Ce qu’il faut savoir de tout à§a:
- Le nom du fichier commence par GNOME_ et se termine par .server
- Le .server contient deux sections
- Il faut que nos 2 OAFIID (de nos 2 sections) soient uniques (GNOME Object Activation Framework Implementation ID) et doivent valoir : nomDuFichier[_Factory]

OK, mais à  quoi elles servent ces « sections » ?

Quand on veut ajouter un applet, on fait donc « clique droit », « ajouter au tableau de bord » .
La liste des applets apparait alors: c’est la deuxième section du code qui est chargée d’afficher notre applet avec son titre, sa description, sa catégorie et son image(qu’il va chercher dans /usr/share/pixmaps).
Une fois que l’on trouve notre applet et qu’on veut l’ajouter, alors on est redirigé sur la 1° section du code (via l’attribut location= »OAFIID:GNOME_PetitApplet_Factory« )
Dans cette section, il y a également un attribution location désignant le chemin (ajustez-le) vers notre script, et il y a aussi un attribut type , lequel définit notre script en tant qu’exécutable.

2. Un peu de GTK

Et oui….. vous ne vous trompez pas… il faut faire du GTK…enfer et damnation…

Voilà , il ne nous reste plus qu’à  créer notre fichier /usr/libexec/petitApplet.py et à  le remplir un peu, pour que notre applet soit fini.

Voici le bout de code :

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys, gtk
import pygtk
pygtk.require('2.0')
import gnomeapplet, gobject
import pynotify
import commands

class PetitApplet(gnomeapplet.Applet):
 """petit applet """

 def __init__(self,applet,iid):
   self.applet = applet
   label = gtk.Label("citation")
   # Calque
   calque = gtk.HBox()
   calque.pack_start(label)# On ajoute notre label
   calque.show_all()# on affiche les widgets du calque
   # Applet
   self.applet.add(calque)# On ajoute notre calque dans l'applet
   self.applet.show_all()# Et on affiche les widgets de notre applet
   # Le compte à  rebours
   self.timer = gobject.timeout_add(600000,self.citation)#en MS donc 600 000 ms = 10 minutes
   self.citation()# Mais on le lance une première fois tout de màªme

 def citation(self):
   """affiche une citation"""
   # On initialise pynotify
   pynotify.init('citation')# Le nom de l'appli
   notification = pynotify.Notification('citation',#titre
   commands.getoutput('fortune'),#la citation
   )
   notification.set_urgency(pynotify.URGENCY_NORMAL) # L'urgence de la notification
   notification.show()# Et on l'affiche

def lancement(applet, iid):
   PetitApplet(applet,iid)
   return True

if __name__ == '__main__':
 gobject.type_register(PetitApplet)

 if len(sys.argv) > 1 and sys.argv[1] == "-d":
   fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
   fenetre.set_title("Petit Applet")
   fenetre.connect("destroy", gtk.main_quit)
   app = gnomeapplet.Applet()
   lancement(app, None)
   app.reparent(fenetre)
   fenetre.show_all()
   gtk.main()
 else:
   gnomeapplet.bonobo_factory('OAFIID:GNOME_PetitApplet_Factory',\
   PetitApplet.__gtype__,'Petit Applet','0.1',lancement)

Ce qu’il faut faire pour créer un applet est de :
- Faire hériter notre classe représentant l’applet de gnomeapplet.Applet
- L‘enregistrer en tant que type PyGTK via gobject.type_register()
- Si on est en train de développer notre applet, il est bon de lancer dans une fenàªtre, d’o๠le if len(sys.argv) >1…
- Enfin, on lance notre applet via bonobo_factory() qui prend 5 arguments : l’OAFIIF de notre 1° section, le type de notre objet (donc il sera de type PyGTK),le titre de notre applet, sa version, et le lanceur(la callback).
- lanceur() instancie juste notre classe, et retourne True(ne pas l’oublier).
- Et voilà , notre applet apparait enfin !

Bon, je n’explique pas PetitApplet vu que ce n’est pas une intro au PyGTK(puis il y a les commentaires) :
pour faire un superbe applet, suffit de s’y connaitre en PyGTK (et d’avoir une bonne idée…)

En bref :
- pour créer une notification, il suffit de l’initialiser : pynotify.init(‘monProgramme’),de créer la notification : notification = pynotify.Notification(‘titre’,'message’), et de l’afficher : notification.show()
- commands.getoutput(maCommande) retourne la sortie de ma commande.

Voilà , c’est tout pour aujourd’hui.

One Comment to “Python et comment créer un applet gnome”

  1. J’avais fait un truc assez similaire ici : https://github.com/BaltoRouberol/Coffee-Break
    Une petite annonce qui t’incitait à te remettre au boulot après une pause de 10 minutes par défaut. Ma copine procrastine beaucoup :)

Leave a Reply









buy christian louboutin outlet uk at uk, and fashion clothing from Abercrombie Outlet uk, winter coats from moncler jackets, best down jackets is canada goose toronto

cheap golf clubs UK DVD Box Sets Cheap Dvds Boxset Christian Louboutin Outlet Christian Louboutin Shoes Outlet UK Chaussure Louboutin Pas Cher Louis Vuitton Bags uk Michael Kors Outlet Uk Michael Kors Outlet Uk Hollister Outlet UK New Balance Outlet Uk New Balance Canada North Face Outlet Uk