Startseite>PiMenu: Bedienoberfläche für LCD-Touchscreens
Aus Raspberry Pi Geek 02/2015

PiMenu: Bedienoberfläche für LCD-Touchscreens

© Sarah Holmlund, 123RF

Neues Gesicht

Dmitri Popov

Mit PiMenu erstellen Sie im Handumdrehen eine menügeführte Benutzeroberfläche, die sich ideal für kleinformatige LCD-Touchscreens eignet.

README

Wenn Sie einen RasPi mit Touchscreen ihr Eigen nennen, kann Ihnen PiMenu in vieler Hinsicht das Leben leichter machen. Damit erstellen Sie mit wenigen Handgriffen eine schicke, auf Kacheln basierende Menüführung für beliebige Einsatzzwecke.

Den Raspberry Pi mit einem kleinen Touchscreen zu kombinieren drängt sich auf den ersten Blick geradezu auf – bis man dann in der Praxis feststellt, dass die Desktops der typischen RasPi-Distributionen sich nur sehr bedingt für solch kleine Bildschirme eignen. Aufruf und Bedienung der Programme und insbesondere Eingaben geraten auf den zwergenhaften Displays zum Geduldsspiel. Andererseits erscheint es als Overkill, ein eigenes maßgeschneidertes grafisches Interface für den Touch-Bildschirm aufzusetzen.

Hier kommt PiMenu [1] ins Spiel: Die in Python und TkInter geschriebene Lösung erlaubt, mit minimalem Aufwand kachelbasierte Bildschirmmenüs zu definieren. Sie stammt aus der Feder des deutschen Programmierers Andreas Gohr, der auch das bekannte DokuWiki entwickelt hat. Ursprünglich für Gohrs Projekt Paper Backup [2] konzipiert, lässt sich die vielseitige Software recht einfach auch für andere Projekte adaptieren, die eine einfach zu bedienende grafische Benutzerschnittstelle benötigen.

Noch besser: PiMenu basiert auf Komponenten, die Raspbian großteils bereits vorinstalliert mitbringt. Sie müssen lediglich mit den ersten beiden Zeilen aus Listing 1 noch das Paket python-yaml nachziehen, um PiMenu auf dem RasPi zum Laufen zu bringen. Dann laden Sie die aktuelle Version von PiMenu aus dem Github-Repository des Projekts herunter, entweder als ZIP-Archiv oder – sofern Git auf dem RasPi eingerichtet ist – über das Kommando aus der letzten Zeile von Listing 1.

Listing 1

 

$ sudo apt-get update
$ sudo apt-get install python-yaml
$ git clone https://github.com/splitbrain/pimenu.git

Touchscreens für den Raspberry Pi

Der Zubehörmarkt offeriert eine ganze Reihe von LCD-Touchscreens, die sich für den Raspberry Pi eignen. Zu den speziell für den RasPi entwickelten Modellen zählt beispielsweise das PiTFT-Panel [3] von Adafruit, für das in Form des PiTFT Pibow [4] auch ein schickes Gehäuse zur Verfügung steht. Eine umfangreiche (allerdings englischsprachige) Dokumentation dazu findet sich auf der Hersteller-Webseite [5].

Einen guten Kandidaten gibt außerdem das RPI-Display von Watterott [6] ab, für das der Hersteller auch ein Tek-Berry-Gehäuse mit passendem Ausschnitt offeriert [7]. Für die Software zum RPi-Display – dazu zählt auch ein vorbereitetes SD-Card-Images – gibt es ein eigenes GitHub-Repository [8].

Alternativ können Sie auch auf Ebay nach entsprechenden Displays Ausschau halten – achten Sie aber darauf, dass für diese eine geeignete Software zur Verfügung steht.

PiMenu umfasst drei Schlüsselkomponenten: Das Python-Skript pimenu.py zeichnet das grafische Interface, die Konfigurationsdatei pimenu.yaml definiert die Menüpunkte dazu. Das Bash-Skript pimenu.sh schließlich setzt die vom Python-Skript zurückgegebenen Benutzereingaben in Aktionen um.

Für jeden in der Konfigurationsdatei vorgegebenen Menüpunkt zeichnet PiMenu eine Kachel, die das Hauptskript dann in das Anzeigefenster einpasst. Das Ergebnis sieht zwar ein wenig nach Windows 8 aus, funktioniert dafür aber auf einem RasPi-Touchscreen bestens, selbst für Benutzer mit Wurstfingern. Hinsichtlich der Komplexität der Benutzerführung setzt Ihnen PiMenu kaum Grenzen, denn in pimenu.yaml dürfen Sie mehrere Ebenen von Menüpunkten und damit recht komplexe Strukturen definieren.

PiMenu im Einsatz

Der Autor ist des Öfteren unterwegs und fotografiert auf Reisen viel. So entstand die Idee zu einer RasPi-basierten Backup-Box für die entstandenen Schnappschüsse. Hier erwies sich PiMenu als idealer Baustein, um das Gedankenspiel in die Praxis umzusetzen. Die Pi-Backup-Box soll Fotos direkt von der Kamera oder von einem Kartenleser holen und sie dann auf ein USB-Speichermedium übertragen.

Als ersten Schritt zur Umsetzung gilt es, zunächst einmal die benötigten Menüpunkte in die Konfigurationsdatei pimenu.yaml zu integrieren (Listing 2). Jeder Menüpunkt darin hat vier Eigenschaften: eine Bezeichnung (name) und ein Label (label) sowie optional eine Kachelfarbe (color) und ein Icon (icon). Der Name des Letzteren verweist auf ein gleichnamiges GIF im Verzeichnis ico, in unserem Beispiel also ico: "menu", also auf das Bild ico/menu.gif.

Über die zusätzliche Eigenschaft items verweisen Sie gegebenenfalls auf Punkte in Untermenüs. In unserem Beispiel enthält Menu die drei Unterpunkte Camera, USB und Backup. Achten Sie darauf, die Punkte in den Menüs und Untermenüs sorgfältig über Leerzeichen einzurücken – Tabulatoren funktionieren hier nicht – und durch ein Minuszeichen als Separator zu trennen.

Listing 2

 

# Menu configuration
---
-
    name: "Menu"
    label: "Menu"
    color: "#FF851B"
    icon: "menu"
    items:
    -
        name : "Camera"
        label: "Camera"
        color: "#3D9970"
        icon : "camera"
    -
        name : "USB"
        label: "USB"
        color: "#39CCCC"
        icon : "usb"
    -
        name : "Backup"
        label: "Backup"
        color: "#7FDBFF"
        icon : "backup"
-
    name: "Exit"
    label: "Exit"
    color: "#85144B"
    icon: "exit"

Das Python-Skript pimenu.py bringt zum einen anhand der Strukturinformationen aus pimenu.yaml die Menükacheln auf den Bildschirm. Zum anderen registriert es das Antippen der Kacheln und ruft dann das Shell-Skript pimenu.sh auf, in dem Sie anhand des Namens der gewählten Kachel die zugehörigen Aktionen festlegen. Dazu richten Sie das Shell-Skript so ein, dass es diesen Namen über eine Case-Anweisung auswertet.

Dazu lesen Sie den Namen mittels des Befehls echo "$*" ein. Der liefert allerdings den kompletten Menüpfad als Zeichenkette zurück, wenn die angetippte Kachel am Ende einer Menüstruktur steht. Drücken Sie beispielsweise in unserem Fall die Kachel Backup, erhalten Sie als Ergebnis die Zeichenkette Menu Backup. Da Sie zur Auswertung nur den Namen der Kachel benötigen, extrahieren Sie diesen mithilfe des Tools Awk aus dem Rückgabestring und weisen ihn dann der Variablen key zu:

key=$(echo "$*" | awk 'NF>1{print $NF}')

Anschließend werten Sie dann mit der Case-Anweisung den Inhalt dieser Variablen aus, wie Listing 3 es für unser Beispiel zeigt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland