Eine Programmiervorlage für Gtk4 Python Apps

Do, 17. Februar 2022, Ralf Hersel

Wer eine Python Anwendung auf Basis von Gtk4 schreiben möchte, hat immer noch Mühe gute und einfache Beispiele zu finden. Auch die Dokumentation ist noch nicht ausreichend, damit Nichtprofis einfache Anwendungen mit Gtk4 schreiben können.

Zum Glück hat Tim Lauridsen ein Template geschrieben, das einem sehr viel Arbeit abnimmt und als Vorlage für eigene Projekte dienen kann. Darin enthalten ist eine Musteranwendung in Python, die auf der Gtk4-Bibliothek beruht und eine Vielzahl von Widgets implementiert.

Die Vorlage besteht aus zwei Teilen: widgets.py und main.py. Erstere enthält neun Klassen, die verschiedene Gtk4-Widgets erzeugen. Die Datei main.py stellt ein Beispielprogramm dar, in dem die Widgets aus widgets.py verwendet werden. Der Entwickler schreibt:

It takes the hassle away from building Gtk4 application in Python So you can create a cool application, without all the boilerplate code. main.py is a sample application. widgets.py contains classes to make it easy to create your UI.

Wenn ihr das selbst ausprobieren möchtet, dann macht in einem dedizierten Verzeichnis entweder das:

git init
git clone https://github.com/timlau/gtk4-python

Oder kopiert von hier die beiden Dateien (siehe oben) in ein dediziertes Verzeichnis herunter. Dann führt ihr die Beispielanwendung mit diesem Befehl aus:

python main.py

Voraussetzung dafür ist, dass mindestens Python 3.9 und Gtk4 bei euch installiert ist. Wenn ihr nicht wisst, wie das geht, dann lest bitte diesen Artikel. Wenn alles funktioniert, seht ihr das:

Screenshots aller 5 Pages, findet ihr bei der Quelle. Dort seht ihr die Beispiele für die 9 verschiedenen Gtk4-Widgets, als da wären:

  • Gtk.ColorChooserDialog
  • Gtk.ListView
  • Gtk.ListBox
  • Gtk.ColumnViewColumn
  • Gtk.SearchBar
  • Gtk.Box
  • Gtk.MenuButton
  • Gtk.Stack
  • Gtk.ApplicationWindow

In main.py werden die Klassen importiert:

from widgets import Window, Stack, MenuButton, get_font_markup,
SearchBar, IconSelector, TextSelector, ListViewStrings, ListViewListStore,
SwitchRow, ButtonRow, MaterialColorDialog, ColumnViewListStore

Keine Panik an dieser Stelle; die Klassennamen der oben genannten Gtk-Widgets heissen anders, zum Beispiel: class MaterialColorDialog(Gtk.ColorChooserDialog). Die Datei main.py macht sich nun die importierten Widgets zu Nutzen. Zum Beispiel beim Hauptfenster:

class MyWindow(Window):
    def __init__(self, title, width, height, **kwargs):
        super(MyWindow, self).__init__(title, height, width, **kwargs)
        # load the custom css, so we can use it later
        self.load_css('main.css')
        self.revealer = None
        # Add Menu Button to the titlebar (Right Side)
        menu = MenuButton(APP_MENU, 'app-menu')
        self.headerbar.pack_end(menu)
...

Es ist eine gute Idee, den Gtk4-Code in ein Modul auszulagern, um sich im Hauptprogramm auf die Applikationslogik zu konzentrieren. Ich selbst habe die Vorlage von Tim Lauridsen noch nicht ausprobiert, um damit eine eigene App zu schreiben; kommt aber noch. Seinen Ansatz halte ich für zielführend und hilfreich.

Fazit

Zwischen der Erstellung eines Programms in einer beliebigen Programmiersprache und einer GUI-Anwendung, liegen Welten. Das hat nichts mit Python oder Gtk4 zu tun, sondern gilt generell. Bei einer GUI-Anwendung hat man es mit 10 % Python-Code und 90 % GUI-Library-Geraffel zu tun.

Eine Alternative dazu bieten GUI-Entwurfswerkzeuge, wie beispielsweise Glade. Davon rate ich Einsteigern dringend ab, weil man damit eine weitere Abstraktionsschicht schafft. Auf den ersten Blick klingt es reizvoll, die Benutzeroberfläche in einem eigenen Werkzeug grafisch zu erstellen. Allerdings führt das dazu, dass man ständig zwischen Glade und der Python-IDE hin und her schaltet, wobei der Überblick verloren geht und man die Gtk-Grundlagen nicht lernt.

Deshalb empfehle ich, mit einer einfachen Anwendung zu beginnen, und den Gtk-Anteil mit in den Hauptcode zu übernehmen. Wenn man die Gtk-Basics verstanden hat, kann man diesen Teil auslagern und sogar Glade verwenden. Auf jeden Fall bietet Tims Vorlage einen Baukasten, aus dem man sich bedienen kann.

Es ist wichtig, dass auch Hobby-Programmierer in der Lage sind, Python-Apps auf Gtk4-Basis schreiben zu können. Ich werde dieses Thema weiter verfolgen, mich selbst schlaumachen und einfache Anleitungen dazu schreiben. Alle Leser:innen sind herzlich eingeladen, dabei mitzuhelfen.

Quelle: https://github.com/timlau/gtk4-python