Eine Programmiervorlage für Gtk4 Python Apps

  Ralf Hersel   Lesezeit: 6 Minuten  🗪 4 Kommentare

Damit können auch Einsteiger lernen, wie man eine Gtk4-basierte Anwendung erstellt.

eine programmiervorlage für gtk4 python apps

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

Tags

Python, Gtk4, GUI-Anwendung, Vorlage, MaterialColorDialog(Gtk.ColorChooserDialog, Anwendung, Gtk, Widget

Pascal Garber
Geschrieben von Pascal Garber am 18. Februar 2022 um 13:02

Danke für den Tip, ich arbeite derzeit an Typescript-Support für JGS. Vielleicht portieren ich das Beispiel zu Typescript :)

Übrigens, ich meine Mal gelesen zu haben, dass auch die GNOME/Gtk-Entwickler selbst von Glade abraten und stattdessen empfehlen die XML-Dateien per Hand zu schreiben.

User123
Geschrieben von User123 am 20. Februar 2022 um 15:17

Hier ist der Blogeintrag: https://blogs.gnome.org/christopherdavis/2020/11/19/glade-not-recommended/ Das Problem mit Glade ist, dass es moderne GTK-Technologien nicht unterstützt und die UI-Dateien in einem eigenen Format schreibt. Auch wird es niemals GTK4 unterstützen. Für GTK4 gibt es jetzt Cambalache: https://gitlab.gnome.org/jpu/cambalache Es unterstützt GTK4 und wird vom Maintainer von Glade entwickelt. Ich weiß nicht, ob diese Probleme hier noch stimmen, da Cambalache komplett von Grund auf geschrieben ist.

Svnskr
Geschrieben von Svnskr am 18. Februar 2022 um 23:18

Vielen Dank für diesen interessanten Beitrag. Freue mich auf weitere Beiträge in dieser Richtung.

Ralf Hersel
Geschrieben von Ralf Hersel am 7. März 2022 um 21:16

Da kommt noch einiges von mir, weil ich sehr an Gtk4-Programmierung interessiert bin. Ich muss meine Python-Programme alle noch auf Gtk4 migrieren.