Python kommt im Standard mit Tkinter für grafische Oberflächen.
Manchmal etwas umständlich, bekommen wir damit doch praktische Fensteranwendungen dargestellt.
Kivy hebt dein GUI auf das nächste Level!
Deutlich einfacher und grafisch ansprechender kannst du hier deine Oberflächen erstellen.
Kivy ist nicht nur auf dem Desktop Plattform übergreifend.
Ohne große Umstände lässt es sich auch auf Android oder iOS ausliefern.
In dieser kleinen Reihe möchte ich eine erste App mit Kivy mit dir bauen.
Kivy Serie
- Erste Schritte mit Fenstern
- Den Benutzer Willkommen heißen
- Die Verpackung zählt!
- Weitere Ansichten (Views)
- Scrollbare Liste mit Aktiendaten
- Aktiendaten API anbinden (yfinance)
- Fehler “Instruction outside the main Kivy thread”
- Element aus dem Layout entfernen
- Aktien in der Watchlist speichern
Ziel des Artikels
Am Ende des Artikels hast du alle Vorbereitungen getroffen.
Die Umgebung ist installiert und der erste Code ist geschrieben.
Du hast dann eine erstellte Anwendung, die du starten kannst.
Damit siehst du dein erstes Fenster und hast die Basis für die weiteren Schritte.
So sollte dein Fenster am Ende dieses Artikels aussehen:
Vorbereitung und Installation
Wie bei jedem Projekt kommt zuerst die virtuelle Umgebung.
Kivy hat hier keine besonderen Ansprüche. Du kannst also einfach wie gewohnt eine virtuelle Umgebung mit pipenv oder virtualenv erzeugen.
Falls du wie ich auf dem neuen Apple M1 Prozessor unterwegs bist, empfehle ich dir eine Anaconda Umgebung!
Da ich mich für Anaconda entschieden habe, werde ich dir hier diesen Weg zeigen. Solltest du einen anderen bevorzugen, findest du hier für so ziemlich jede Variante Unterstützung in der Installation.
Zuerst musst du – wie gesagt – eine virtuelle Umgebung erzeugen.
Ist Anaconda bereits installiert, genügt dafür der Befehl:
conda create -n kivy_venv python=3.9
Nachdem die Umgebung erfolgreich erstellt wurde, kannst du sie aktivieren und mit der Installation beginnen:
conda activate kivy_venv
conda install kivy -c conda-forge
Nachdem die Installation abgeschlossen ist, bist du bereit für den Start.
Öffne also ein neues Projekt in deiner bevorzugten IDE und los geht’s!
Eine neue App definieren
Zuallererst muss die App natürlich erzeugt werden.
Erst dann kannst du Inhalte einfügen.
Eine Kivy App zu erzeugen ist ganz einfach.
Dafür musst du lediglich aus kivy.app die Klasse App importieren und eine eigene Klasse davon ableiten:
from kivy.app import App
class MyApp(App):
pass
Alles was dabei vor “App” steht – also in meinem Fall “My” – wird als Titel für das Fenster genutzt.
Heißt deine Klasse also “KivyApp” wird der Fenster-Titel “Kivy” sein.
Als Nächstes muss die build Funktion überschrieben werden.
Die Kivy Klasse App hat bereits eine Funktion build, um die App initial aufzubauen.
Mit der Funktion kann das initiale Fenster “gestaltet” werden.
from kivy.uix.gridlayout import GridLayout
def build(self):
self.window = GridLayout()
return self.window
Kivy stellt mehrere Layouts bereit.
So gibt es zum Beispiel FloatLayout, BoxLayout, GridLayout und einige mehr.
Eine genaue Übersicht findest du hier.
Hier nutzt du jetzt einfach erstmal ein Grid.
Ein Grid ist immer schön für eine einfache Anordnung in Zeilen und Spalten.
Eine Kivy App kommt auch immer schon mit einer Variablen window.
Dadurch werden die Eigenschaften des Fensters definiert, das Kivy erzeugen soll.
Hier kann sowohl das Layout erzeugt werden, als auch Größen oder Komponenten definiert werden.
Für den Moment reicht es uns erstmal einfach ein GridLayout zu hinterlegen.
Am Ende der build Funktion müssen wir das fertig konfigurierte Fenster dann wieder rausgeben → return self.window
Damit ist Kivy dann in der Lage, das fertig konfigurierte Fenster zu erzeugen und darzustellen.
Das war’s auch schon.
Mehr ist nicht nötig, um ein Fenster zu erzeugen.
Der erste Start der App
Als Letztes musst du deine Klasse nur noch aufrufen.
Dazu erzeugst du einfach eine Instanz und rufst die Funktion run() auf.
if __name__ == '__main__':
app = MyApp()
app.run()
Natürlich rufst du die App nicht einfach so auf!
Auf keinen Fall solltest du das if __name__ == ‘__main__’ vergessen.
Du weißt nicht, wofür du das verwenden solltest?
Hier findest du eine Erklärung.
Darunter dann einfach eine neue Instanz erzeugen und in der Variablen app ablegen → app = MyApp()
Anschließend kannst du an der Instanz direkt die Funktion run() aufrufen → app.run()
Im Hintergrund kümmert sich Kivy jetzt um alles.
Es wird eine Schleife erzeugt, die das Fenster mit den Angaben zeichnet und sich darum, kümmert alles offenzuhalten bis du das Fenster wieder schließt.
Fertig ist dein erstes Fenster!
Herzlichen Glückwunsch! 🙂
Im nächsten Artikel werden wir das Fenster mit den ersten Komponenten füllen.
Bleib also auf jeden Fall dran 😉
Kurse
Code Challenges und YouTube Videos führen nicht immer zum gewünschten Erfolg.
Manchmal ist es besser, gezielt und strukturiert durch ein Thema zu arbeiten.
Schau dich einfach mal bei meinen Kursen um.
Ohne lästiges Blah Blah steigen wir direkt in das Thema ein und behandeln alles, was du brauchst.
Ingo Janssen ist ein Softwareentwickler mit über 10 Jahren Erfahrung in der Leitung seines eigenen Unternehmens.
Er studierte Wirtschaftsinformatik an der TH Deggendorf und hat Softwareentwicklung an der FOM Hochschule in München unterrichtet.
Ingo hat mit einer Vielzahl von Unternehmen zusammengearbeitet, von kleinen und mittelständischen Unternehmen bis hin zu MDAX- und DAX-gelisteten Unternehmen.
Ingo ist leidenschaftlich daran interessiert, sein Wissen und seine Expertise mit anderen zu teilen. Aus diesem Grund betreibt er einen YouTube-Kanal mit Programmier-Tutorials und eine Discord-Community, in der Entwickler miteinander in Kontakt treten und voneinander lernen können.
Sie können Ingo auch auf LinkedIn, Xing und Gulp finden, wo er Updates über seine Arbeit teilt und Einblicke in die Tech-Branche gibt.
YouTube | Discord | LinkedIn | Xing | Gulp Profile