Ein kleines GTK4-Programm in Python

  Ralf Hersel   Lesezeit: 4 Minuten  🗪 8 Kommentare

Aller Anfang ist einfach.

ein kleines gtk4-programm in python

Die meisten Gelegenheitsentwickler unter uns, die Python und GTK als GUI-Toolkit verwenden, sind vermutlich noch nicht auf der aktuellen Version GTK4 angekommen, sondern schreiben ihre Anwendungen noch auf Basis von GTK3. Zumindest bei mir ist das so. Deshalb zeigt dieser Artikel ein kleines Pythonprogramm mit GTK4.

Der Artikel richtet sich an Anfänger und Umsteiger und hat nicht den Anspruch, ein sinnvolles Programm zu entwickeln. Beim Beispiel handelt es sich lediglich um ein Mini-Programm im Hello World Stil.

Bevor es losgeht, sollte man die Voraussetzungen prüfen. Ich gehe davon aus, dass ein Python3 zur Standardinstallation in jeder aktuellen GNU/Linux-Distribution gehört, weshalb wir diesen Schritt überspringen. Weniger klar ist, ob GTK4 installiert ist. Das kann man mit diesem Befehl prüfen:

# Arch-basierte Distros:
pamac list -i | grep gtk4

#Debian-basierte Distros
dpkg -l | grep gtk4

Falls der Befehl nichts ausgibt, muss man GTK4 installieren, zum Beispiel mit:

pamac install gtk4
oder
sudo apt install libgtk-4-bin libgtk-4-common libgtk-4-dev libgtk-4-doc

Das kleine Programm sieht so aus:

Nach dem üblichen Shebang und der Angabe zum Coding in den ersten beiden Zeilen, wird das Modul PyGObject geladen (import gi), welches das Python-Binding für GTK enthält. In Zeile 5 wird Version 4 von GTK erzwungen und in Zeile 6 die GTK-Bindings aus dem Modul PyGObject geladen.

Nun geht es in Zeile 17 weiter. Dort wird ein GTK-Anwendungsobjekt erzeugt und in Zeile 18 das Ereignis 'on_activate' dem Event-Handler 'def on_activate' zugewiesen. Damit weiss das Programm, was zu tun ist, sobald die Anwendung gestartet wird: Es ruft die Funktion 'on_activate' auf und übergibt das App-Objekt.

In der Funktion (ab Zeile 8) wird das Fenster gebaut. Zuerst wird ein Fensterobjekt (win) erzeugt und mit einem Titel und einer Grösse versehen. Dann wird in Zeile 12 ein Button erzeugt und mit einem Text (label) ausgestattet. In Zeile 13 wird bestimmt, wie der Button auf das Ereignis 'clicked' reagieren soll. In diesem Fall soll das Fender geschlossen werden (win.close). Da es sich hierbei nur um einen Befehl handelt, wird eine Lambda-Funktion verwendet, anstatt eine richtige Funktion zu schreiben, was man auch hätte machen können.

Zum Schluss wird der Button auf dem Fenster platziert (Zeile 14) und das Fenster gestartet (Zeile 15).

Das kleine Programm kann im Terminal mittels 'python3 gtk4_test.py' gestartet werden und zeigt sich so:

Der Button ist als solcher kaum zu erkennen, weil er von GTK flächenfüllend im gesamten Fenster positioniert wird. Hier noch der Code zum Kopieren:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk

def on_activate(app):
    win = Gtk.ApplicationWindow(application=app)
    win.set_title("GTK4 Beispiel")
    win.set_default_size(300, 200)
    btn = Gtk.Button(label="Klick mich!")
    btn.connect('clicked', lambda x: win.close())
    win.set_child(btn)
    win.present()

app = Gtk.Application(application_id='org.gtk.Example')
app.connect('activate', on_activate)
app.run(None)

Quellen:

https://github.com/ToshioCP/Gtk4-tutorial

https://pygobject.readthedocs.io/en/latest/index.html#

https://lazka.github.io/pgi-docs/#faq.html

Tags

GTK4, Programm, Zeile, GTK, PyGObject, Python, Button

Johannes Kaisinger
Geschrieben von Johannes Kaisinger am 21. Oktober 2021 um 13:31

Es gibt die Möglichkeit über conda:

Kann hilfreich sein wenn man eine ältere Distro einsetzt.

Henning
Geschrieben von Henning am 21. Oktober 2021 um 15:03

Danke für den Beitrag.

Es wär allerdings super, wenn Du den Quellcode des Scripts im Klartext im Artikel darstellen würdest, statt nur als Graphik. So hätte dann auch ein blinder was davon. ... und rauskopieren könnte man den Code auch.

Ralf Hersel
Geschrieben von Ralf Hersel am 21. Oktober 2021 um 15:43

Danke für den Hinweis. Mache ich noch. Er ist dann allerdings doppelt vorhanden, weil ich die Zeilennummern aus dem Screenshot brauche und diese im Code-Fenster nicht habe.

User123
Geschrieben von User123 am 21. Oktober 2021 um 17:21

Danke für diesen tollen Artikel! Generell finde ich solche Artikel spannend und würde mich freuen, wenn es vielleicht eine kleine Artikelserie gäbe.

Ralf Hersel
Geschrieben von Ralf Hersel am 21. Oktober 2021 um 20:37

Habe ich mir auch schon überlegt. Vielleicht keine Serie, sondern ein 2. Beispiel, das brauchbarer, aber nicht zu lang ist. Mal sehen.

AnotherGnomeFan
Geschrieben von AnotherGnomeFan am 28. Oktober 2022 um 01:31

Das solltest du auf alle Fälle überlegen. Aktuell gibt es sehr wenig python-gtk4 Beispiele.

Fabian
Geschrieben von Fabian am 22. Oktober 2021 um 08:44

Ich glaube, die Anleitung für die Installation ist falsch.

Laut dieser Anleitung: https://github.com/ToshioCP/Gtk4-tutorial/blob/main/gfm/sec2.md ist es zum Beispiel für Ubuntu 21.04 und Debian unstable:

apt install libgtk-4-bin libgtk-4-common libgtk-4-dev libgtk-4-doc

Das Paket gtk4 gibt es nicht.

Ralf Hersel
Geschrieben von Ralf Hersel am 22. Oktober 2021 um 09:27

Danke für die Korrektur. Ich hatte es nur auf Manjaro getestet.