Plasmoïde pour KDE4 avec Python

Cet article va expliquer comment créer un simple plasmoïde avec Python pour KDE.

Ce plasmoïde va tout simplement afficher des fortunes en boucle. Il faut donc avoir installer ce programme indispensable (au cas où: aptitude install fortune).

La version utilisée de KDE est la 4.3.90 avec Python 2.6.4. Il faudra également:

  • SIP ;
  • PyQt4.

Tout était déjà installé chez moi.

Passons à l’essentiel, le développement du plasmoïde. C’est très simple. On va d’abord créer un répertoire ayant cette structure:

* fortune-viewer/ 
  * contents/ 
    * code/ 
        * main.py
    * ui/
  * metadata.desktop

Contenu de metadata.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Fortune viewer
Name[fr]=Visualisateur de fortunes
Type=Service
ServiceTypes=Plasma/Applet
Icon=chronometer
X-Plasma-API=python
X-Plasma-MainScript=code/main.py
X-KDE-PluginInfo-Author=Cédric Bonhomme
X-KDE-PluginInfo-Email=cedric.bonhomme@orange.fr
X-KDE-PluginInfo-Name=fortune-viewer
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://plasma.kde.org/
X-KDE-PluginInfo-Category=Game
X-KDE-PluginInfo-Depends=Fortune
X-KDE-PluginInfo-License=GPLv3
X-KDE-PluginInfo-EnabledByDefault=true

Voilà, je pense  qu’il n’y a rien a expliquer. Nous allons voir le code à proprement parler du fichier main.py. Il pourrait y avoir d’autres scripts Python évidemment. Dans ce tout petit exemple le dossier ui/ est inutile. On peut donc s’en passer.

Contenu de main.py

# -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4 import plasmascript
import subprocess

class FortuneViewer(plasmascript.Applet):
    def __init__(self,parent,args=None):
        plasmascript.Applet.__init__(self,parent)

    def init(self):
        timer = QTimer(self);
        self.setHasConfigurationInterface(False)

        self.theme = Plasma.Svg(self)
        self.theme.setImagePath("widgets/background")
        self.setBackgroundHints(Plasma.Applet.DefaultBackground)

        self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
        self.logMessage = Plasma.Label(self.applet)
        self.layout.addItem(self.logMessage)
        self.setLayout(self.layout)
        self.resize(400, 400)
        QObject.connect(timer, SIGNAL("timeout()"), self.fortuneUpdate)
        timer.start(5000)
        self.fortuneUpdate()

    def fortuneUpdate(self):
        p=subprocess.Popen("/usr/games/fortune", shell=True, \
                stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        output,errors=p.communicate()
        self.logMessage.setText(output+errors)

def CreateApplet(parent):
    return FortuneViewer(parent)

C’est la fonction fortuneUpdate() qui se charge de récupérer la sortie standard de la commande fortune.

Test et installation

Pour tester votre plasmoïde:

cd fortune-viewer/..
plasmoidviewer fortune-viewer

Pour l’installation:

cd fortune-viewer/..
zip -r fortune-viewer.zip fortune-viewer/
plasmapkg -i fortune-viewer

La troisième ligne peut être faite à l’aide de l’interface graphique.

Le résultat

Visualisateur de fortunes

Maintenant on aurait pu faire quelque chose de sérieux. Genre afficher les mails non lus, faire un tail sur /var/log/syslog, cat /cpuinfo ou afficher la température avec un cat /proc/acpi/thermal_zone/*, etc. .

Le plasmoïde.

Have fun !

Related Posts