Home / LinuxUser / 2004 / 03 / KDE-Hintergrund mit SuperKaramba und Python aufwerten

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(243 Punkte bei 15 Stimmen)
Re: War doch klar...
(179 Punkte bei 5 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

852 Hits
Wertung: 0 Punkte (2 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 0 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...
Skype für 64-Bit-Prozessor u. Suse 12.1
Klaus Sigerist, 05.02.2012 11:39, 3 Antworten
Hallo Gemeinde! Ich bin nur ein einfacher Nutzer und habe Probleme mit der Installation von Skyp...
8! Anfängerfrage :) Wie finde ich in Ubuntu die Datenträger (Bild, Text)
samuel leusam, 04.02.2012 15:53, 2 Antworten
Ich habe neu Ubuntu. Wenn ich die SD Karte im Laptop einstecke, erkennt er sie und gibt ihr den N...