Auf dem Raspberry Pi eine GUI programmieren

Wer eine grafische Oberfläche (GUI) programmieren möchte, will damit dem Benutzer zu einer leichteren Bedienung verhelfen. Auch Raspbian Buster hat -wie alle Vorgänger- eine GUI bzw. einen Desktop der z.B. ein Öffnen, Verschieben und Vergrößern von Fenstern ermöglicht.

Eine GUI mit C/C++

Das Design einer GUI kann heute mit sehr vielen Programmiersprachen und Bibliotheken geschehen. So ist z.B. GTK+ ein Toolkit mit dem grafische Oberflächen mit C++ programmiert werden. Als Anwender eines Betriebssystems wie Raspbian müssen Sie sich darüber Gedanken machen wie die Oberfläche Ihres Programms aussehen soll, damit es von Ihnen oder anderen leicht und sicher verwendet werden kann. Für die effektive Entwicklung von C/C++ Programmen brauchen Sie eine sogenannte Entwicklungsumgebung (IDE), die einen Texteditor mit Syntaxhighlight mit Werkzeugen zur Programmerstellung vereint. Der QtCreator oder Code::Blocks sind dafür bekannte Beispiele. Auch Geany ist wunderbar auf dem Raspberry Pi verwendbar.

Eine GUI mit Bash

Etwas anders sieht die Vorgehensweise aus, wenn Sie systemnahe Dinge tun wollen (z.B. Dateien auflisten und auswählen) und keine zu hohen Ansprüche an die zu entwickelnde Bedienoberfläche (GUI) stellen. Ein einfacher Programmstarter kann darin bestehen, mehrere Programme mit unterschiedlichen Parametern aufzulisten, per Cursortasten eine Auswahl zu treffen und mit Enter das gewünschte Programm zu starten. So etwas hat es auch schon gegeben, als der PC noch sehr jung war und nur ASCII-Zeichen anzeigen konnte.

Wenn Sie mit Bash eine GUI entwickeln wollen, dann gibt es dafür Tools in folgender Abfolge bzw. Leistungsfähigkeit:

whiptail -> dialog -> Zenity

Der RPi-Desktop ist die grafische Oberfläche des Raspbian Betriebssystems. Während whiptail und dialog nur mit dem ASCII-Zeichensatz arbeiten, benötigt Zenity den RPi-Desktop – was aber zu einer viel schöneren optischen Darstellung führt. Wie eine Zenity Oberfläche aussehen kann, sehen Sie bei den Screencast-Videos zum Buch. Ein guter Einstieg um eine Raspberry GUI zu programmieren.

Eine zenity GUI und deren Bash Skript
Eine aktive Zenity-GUI und deren Bash Skript

Vielleicht werden Sie sich jetzt fragen, warum man sich überhaupt mit whiptail oder dialog beschäftigen soll, wenn Zenity optisch viel ansprechender ist. Aber in der Praxis stellt sich diese Frage eher in der Form, ob Sie bei einem Fernzugriff (z.B. auf einen Raspberry Pi Zero W) auf der Zielplattform eine grafische Oberfläche laufen haben. Wenn das der Fall ist, arbeiten Sie z.B. mit TightVNC und können folglich Zenity verwenden. Wenn aber die Zielplattform keinen RPi-Desktop hat (es gibt ja auch ein Raspbian ohne GUI) dann sind nur noch whiptail und dialog verwendbar. Der Begriff ASCII-GUI wird übrigens auch bei Basiswissen erläutert.

Alle drei genannten Tools (whiptail,dialog,Zenity) haben übrigens eine recht ähnliche Aufrufsyntax, so daß ein Umstieg nicht schwerfällt, wenn man mit Bash vertraut ist. Zenity-Dialoge können übrigens auch in Python sowie anderen Programmiersprachen erstellt werden.

Harald Schmidt

Buchautor, Softwareentwickler, Dipl.-Ing.