Kivy - ein Toolkit für GUI-Programme

Kivy ist eines von mehreren Toolkits, mit denen sich in Python Programme mit einer graphischen Bedienoberfläche (Graphical User Interface, kurz: GUI) programmieren lassen. [1] Um Kivy mit Python3 nutzen zu können, müssen die folgenden Pakete installiert werden:

# Aktuelle Paketquellen hinzufügen:
sudo add-apt-repository ppa:kivy-team/kivy

# Paketquellen auf mögliche Updates prüfen:
sudo aptitude update

# Kivy-Pakete installieren:
sudo aptitude install cython3 python3-kivy python3-kivy-bin python3-kivy-common

# Kivy-Beispiele installieren (optional):
sudo aptitude install kivy-examples

Installiert man auch das Paket kivy-examples, so können im Verzeichnis /usr/share/kivy-examples einige fertige Beispiel-Programme ausprobiert und als Vorlage genutzt werden.

Ein “Hallo Welt”-Beispiel

Mit Kivy geschriebene Programme haben stets eine App-Klasse, die am einfachsten mittels Vererbung auf der Standard-App-Klasse aufbauen kann. Diese Standard-Klasse stellt unter anderem eine run()- und eine build()-Methode bereit, wobei letztere automatisch aufgerufen wird, wenn das Programm mittels der run()-Methode gestartet wird. Die build()-Funktion wiederum startet automatisch das graphische Bedienfenster, und kann zugleich weitere Elemente in diesem Fenster platzieren; sie sollte als Ergebnis stets das “Root”-Widget der Anwendung liefern.

Im einfachsten Fall soll ein schlichter “Button” mittig im Fenster platziert werden, der die Bezeichnung “Hallo Welt!” trägt. Ein erstes vollständiges Programm, das wiederum auf ein bereits vordefiniertes Button-Element zurückgreift, kann damit folgendermaßen aussehen:

# Datei: hello.py

import kivy
kivy.require('1.9.0') # Mindest-Version von Kivy

from kivy.app import App
from kivy.uix.button import Button


class HelloApp(App):

    def build(self):
        return Button(text='Hallo Welt!')

if __name__== "__main__":
    HelloApp().run()

Das uix-Modul stellt allgemeine GUI-Elemte bereit, wie beispielsweise Widgets und Layouts.

Bei einem Aufruf der Programmdatei wird durch die if-main-Abfrage eine Instanz der App erzeugt und diese gestartet, wobei wiederum die build()-Funktion aufgerufen wird:

python3 hello.py

Damit erscheint folgendes “Anwendungs”-Fenster:

_images/kivy-hallo-welt.png

Dieses erste Programm hat keine weitere Funktion; es kann beendet werden, indem auf das X-Symbol geklickt wird oder in der Shell die Anwendung mittels Ctrl c unterbrochen wird.

Design-Anpassungen mittels einer .kv-Datei

Das Layout einer Anwendung sollte für eine bessere Übersichtlichkeit, Anpassungsfähigkeit und Wiederverwertbarkeit von der eigentlichen “Logik” des Programms getrennt sein (“Model-View-Controller”). Mit Kivy wird dieser Grundsatz in einer Art und Weise verfolgt, der stark an die Anpassung des Layouts einer Webseite mittels CSS erinnert: Das Aussehen der einzelnen graphischen Elemente eines Programms wird über eine entsprechende .kv-Datei festgelegt werden.

Beim Aufruf der Programm-Datei wird automatisch diejenige .kv-Datei im gleichen Verzeichnis geladen, deren Namen mit (in Kleinbuchstaben) dem Namen der App-Klasse übereinstimmt: Hat die App-Klasse beispielsweise den Namen HelloWorldApp, so heißt die zugehörige .kv-Datei helloworld.kv. In dieser Datei kann mit einer YAML-artigen Syntax das Design einzelner “Widgets” (Teilbereiche des Hauptfensters) sowie deren Anordnung festgelegt werden.

... to be continued ...


Anmerkungen:

[1]Weiter GUI-Toolkits für Python sind das in der Standard-Installation enthaltene Tkinter, sowie PyGTK, PyQT und wxPython (siehe Übersicht). Kivy ist allerdings das einzige in Python selbst geschriebene Toolkit und bietet somit eine sehr python-typische Syntax.