Die Schlange macht Karamba

KDE-Hintergrund mit SuperKaramba und Python aufwerten

01.03.2004
SuperKaramba sorgt dafür, dass sogar der KDE-Hintergrund etwas Nützliches tut. Was das ist, können Sie selbst programmieren – mit Python.

Wenn Ihr KDE-Hintergrund dank SuperKaramba [2] bereits als Uhr und MP3-Spieler fungiert [1], kommt schnell der Wunsch nach mehr auf: Tatsächlich lassen sich SuperKaramba-Themes mit Hilfe der Programmiersprache Python [3] um weitreichende interaktive Features aufwerten. So gibt es die Möglichkeit, Menüs zu erzeugen, Texte dynamisch zu ändern und die Themes sogar mit "Drag & Drop"-Unterstützung auszustatten.

Die grundlegende Idee dahinter: Wenn in KDE Ereignisse auftreten (z. B. die Maus bewegt, ein neues Programm gestartet oder ein Menüpunkt ausgewählt wird), sendet das entsprechende Programm Signale aus, auf die speziell ausgestattete Funktionen reagieren und so dafür sorgen, dass etwas geschieht. Auch SuperKaramba bekommt derartige "events" mit. Die möglichen Reaktionen definiert die SuperKaramba-Python-API, deren Funktionen [5] detailliert erläutert.

Tabelle 1: SuperKarambas Signalfühler

Funktion Wann ausgeführt?
initWidget(widget) Beim Erzeugen des SuperKaramba-Widgets.
widgetUpdated(widget) Wenn das Theme aktualisiert wird. Das Aktualisierungsintervall legt die .theme-Datei fest.
widgetClicked(widget, x, y, button) Bei einem Mausklick innerhalb des Themes. x und y geben an, auf welche Koordinaten (relativ zum Theme) geklickt wurde. button verrät die benutzte Maustaste.
widgetMouseMoved(widget, x, y, button) Bei Mausbewegung innerhalb des Themes. x und y bezeichnen die aktuellen Koordinaten (relativ zum Theme); button enthält die Nummer des gegebenenfalls gedrückt gehaltenen Mausknopfs.
menuItemClicked(widget, menu, id) Beim Anklicken eines Menüpunkts. Übergeben wird das Handle des Menüs (siehe Text) sowie das des angeklickten Menüpunkts (id).
menuOptionChanged(widget, key, value) Beim Aufrufen eines Punkts im Theme-Konfigurationsmenü. key enthält das Handle des Menüpunkts und value den neuen Wert (true oder false, also ja oder nein).
meterClicked(widget, meter, button) Beim Anklicken eines Anzeigegeräts. meter enthält dessen Handle, button die Nummer des benutzten Mausknopfs.
commandOutput(widget, pid, output) Bei Programmaufrufen mittels executeInteractive(), sofern dabei etwas auf stdout geschrieben wurde. pid ist die Prozess-ID des Programms, output enthält dessen Ausgabetext.
itemDropped(widget, dropText) Wenn Objekte (z. B. Icons) bei "Drag & Drop"-Aktionen auf das Theme "fallen". dropText enthält einen Text zu diesem Objekt (z. B. dessen URL, siehe Abschnitt "Ziehen und fallen lassen").
startupAdded(widget, startup) Wenn KDE eine neue Applikation startet. Ist das Startprozedere beendet, folgt das Signal startupRemoved(), dem seinerseits taskAdded() folgt.
startupRemoved(widget, startup) Siehe startupAdded().
taskAdded(widget, task) Siehe startupAdded().
taskRemoved(widget, task) Wenn ein Programm beendet wurde.
activeTaskChanged(widget, task) Wenn eine andere Applikation in den Vordergrund geholt wird.

Schlangenbändiger

Um bestehende Themes wie das in [1] erzeugte mit Python durch weitere Funktionalität aufzuwerten, müssen wir keine Änderungen am bisherigen Code vornehmen, sondern ergänzen das Theme einfach um eine zusätzliche Datei im Theme-Verzeichnis, die denselben Namen wie das Theme trägt und auf die Endung .py endet. Die SuperKaramba-Entwickler empfehlen, mit einer Vorlage [6] zu beginnen und diese anzupassen. Eine Version mit deutsche Kommentaren steht unter [7] zum Download bereit, das Beispiel-Theme unter [4].

Entpacken Sie letzteres mit

tar -C ~/.superkaramba -xjvf small_text_xmms.tar.bz2

im (ggf. neu anzulegenden) Verzeichnis ~/.superkaramba. Dabei entsteht das Theme-Verzeichnis small_text_xmms, in das Sie die Vorlage template_deutsch.py (bzw. template.py, wenn Sie das englische Original bevorzugen) hineinkopieren. Dabei muss sie noch den richtigen Namen bekommen:

cp template_deutsch.py ~/.superkaramba/small_text_xmms/small_text_xmms.py

Öffnet man die Theme-Datei small_text_xmms.theme nun über den Open...-Dialog im SuperKaramba-Hauptfenster, wird der Python-Quellcode automatisch in Python-Bytecode (siehe Kasten 1) übersetzt. (Sollte der Dateiauswahldialog das versteckte Verzeichnis .superkaramba nicht anzeigen, drücken Sie [F8].) Da dieser Kompiliervorgang Fehler- und Debug-Informationen auf dem Standardausgabekanal ausgibt, empfiehlt es sich, SuperKaramba manuell mit dem Befehl superkaramba (ggf. mit zusätzlicher Pfadangabe) in einem X-Terminal (z. B. konsole) zu starten.

Beispielsweise signalisiert der Hinweis Meine Python-Erweiterung wurde soeben geladen!, den der print-Befehl

print "Meine Python-Erweiterung wurde soeben geladen!"

in der letzten Zeile der Vorlage erzeugt, dass die Python-Datei korrekt übersetzt wurde.

Leider klappte dies bei der vom Autor verwendeten Suse-9-Installation nicht von vornherein: Offensichtlich setzt die Distribution einige von Python verwendete Umgebungsvariablen nicht korrekt. Abhilfe schaffen hier die beiden folgenden Befehle in der konsole, aus der SuperKaramba gestartet werden soll:

export PYTHONPATH=/usr/lib/python2.3/
export PYTHONHOME=/usr/lib/python2.3/

Ziehen und fallen lassen

Als erste Erweiterung soll das in [1] beschriebene Beispiel-Theme Drag & Drop für .mp3-Dateien hinzubekommen, damit man sie aus dem Konqueror mit der Maus auf den integrierten MP3-Player ziehen kann. Augenblicklich soll XMMS sie abspielen.

Die Lösung dieser Aufgabe zeigt Listing 1, das sich in Gestalt der Datei dragdrop.py auch auf der Heft-CD befindet. Wer sie nicht selbst aus der Vorlagedatei entwickeln will, überschreibt small_text_xmms.py einfach damit.

Damit SuperKaramba-Themes Drag & Drop unterstützen, bedarf es entsprechender Initialisierung. Das geschieht am besten beim Erzeugen des SuperKaramba-Widgets. Dabei wird ein entsprechendes Signal ausgesendet, auf das SuperKaramba mit einem "Fühler", der sogenannten Callback-Funktion initWidget(), reagiert. Mit

def initWidget(widget):

sagen wir, das wir in der Zeile darunter definieren wollen, was zu tun ist, wenn das Theme auf dem Desktop-Hintergrund erscheint:

karamba.acceptDrops(widget)

Das Widget soll Drop-Ereignisse akzeptieren.

Auf ein solches reagiert SuperKaramba mit itemDropped(). Diese Funktion erhält vom Drop-Signal, wie Tabelle 1 zeigt, zwei Informationen: einen Zeiger auf das betroffende Widget und – im Falle von Dateien – eine mehrzeilige Liste der betroffenen Dateinamen in der Variablen dropText, eine Datei pro Zeile.

Leider steht vor diesen Dateinamen jeweils noch das Stichwort file:. Da XMMS nicht mit ganzen URLs vom Typ file:/pfad/zu/datei.mp3, sondern nur mit Filenamen wie /pfad/zu/datei.mp3 hantiert, müssen wir den Inhalt von dropText etwas verändern, bevor wir ihn an den Mediaplayer übergeben können.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • KDE-Hintergrund mit SuperKaramba aufwerten
    Der Desktop-Hintergrund – lediglich eine Fläche zum Anzeigen hübscher Bildchen? Von wegen! Mit SuperKaramba gestalten Sie das KDE-Root-Fenster zum Multifunktionswerkzeug um.
  • Korner: Superkaramba
    Mal mehr, mal weniger nützlich, aber immer schön anzusehen, ist das Programm Superkaramba mit all seinen Themes, die Ihrem Desktop seine ganz persönliche Note verleihen.
  • KDE 3.5 ist fertig
  • gDesklets installieren und nutzen
    Mit ebenso nützlichen wie optisch attraktiven Desktop-Extensions verleiht gDesklets der Gnome-Oberfläche einen persönlichen Charakter. Setzen sie die piffige Desktop-Erweiterung auch mit anderen GUIs optimal ein und entwickeln Sie Ihre eigenen Desklets.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...