PyGObject: Ein Leitfaden zum Erstellen von Python-GUI-Anwendungen auf Linux

Die Erstellung grafischer Benutzeroberflächen (GUI) ist eine fantastische Methode, um Ihre Ideen zu verwirklichen und Ihre Programme benutzerfreundlicher zu machen.

PyGObject ist eine Python-Bibliothek, die Entwicklern ermöglicht, GUI-Anwendungen auf Linux-Desktop-Systemen mit dem GTK-(GIMP Toolkit)-Framework zu erstellen. GTK ist in Linux-Umgebungen weit verbreitet und treibt viele populäre Desktopanwendungen wie Gedit, GNOME Terminal und mehr.

In diesem Artikel werden wir erkunden, wie man mit PyGObject unter einer Linux-Desktopumgebung GUI-Anwendungen erstellen kann. Wir beginnen mit dem Verständnis, was PyGObject ist, wie Sie es installieren und dann bauen wir eine einfache GUI-Anwendung weiter.

Schritt 1: Installieren von Python und GTK unter Linux

Um mit PyGObject zu arbeiten, müssen Sie Python installiert haben und die meisten heutigen Linux-Distributionen come mit Python vorinstalliert, aber Sie können das durch Ausführen der folgenden angemessenen Befehle für Ihre spezifische Linux-Distribution überprüfen:

python3 --version

Python 3.12.3

Wenn Python nicht installiert ist, können Sie es mit dem folgenden Befehl installieren:

sudo apt install python3       [On Debian, Ubuntu and Mint]
sudo dnf install python3       [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add python3           [On Alpine Linux]
sudo pacman -S python          [On Arch Linux]
sudo zypper install python3    [On OpenSUSE]    

Nun müssen Sie die PyGObject-Schnittstellen für Python installieren, sowie die GTK-Entwicklungsbibliotheken.

sudo apt install python3-gi gir1.2-gtk-3.0    [On Debian, Ubuntu and Mint]
sudo dnf install python3-gobject gtk3         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject gtk+3                [On Alpine Linux]
sudo pacman -S python-gobject gtk3            [On Arch Linux]
sudo zypper install python3-gobject gtk3      [On OpenSUSE] 

Schritt 2: Installieren von PyGObject in Linux

Sobald Python und die GTK-Entwicklungslibaries installiert sind, können Sie PyGObject mit dem untenstehenden angemessenen Befehl für Ihre bestimmte Linux-Distribution installieren.

sudo apt install python3-gi           [On Debian, Ubuntu and Mint]
sudo dnf install pygobject3           [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject              [On Alpine Linux]
sudo pacman -S python-gobject         [On Arch Linux]
sudo zypper install python3-gobject   [On OpenSUSE]    

Nach der Installation sind Sie bereit, um GUI-Anwendungen mit PyGObject und GTK zu entwickeln.

Erstellen des ersten PyGObject-GUI-Anwendungen in Linux

Nun werden wir eine einfache PyGObject-Anwendung erstellen, die ein Fenster mit einem Knopf anzeigt. Wenn der Knopf angeklickt wird, wird eine Nachricht angezeigt, die sagt, „Hallo, Welt!„.

Erstellen Sie ein Python-Datei namens app.py, und beginnen wir mit dem Schreiben der grundlegenden Struktur unserer PyGObject-Anwendung.

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

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World App")
        self.set_size_request(300, 100)

        # Creating a button and adding it to the window
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        self.add(button)

    def on_button_clicked(self, widget):
        print("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)  # Close the app when window is closed
app.show_all()
Gtk.main()

Erklärung des Codes:

  • Die ersten beiden Zeilen importieren die notwendigen PyGObject-Module. Wir legen die GTK-Version fest, die wir verwenden möchten (3.0 in diesem Fall).
  • Die Klasse MyApp erbt von Gtk.Window, die das Hauptfenster der Anwendung repräsentiert.
  • Wir erstellen einen Knopf mit Gtk.Button und setzen die Etikett des Knopfes auf „Klicke mich„. Wir verbinden auch den Knopf-Ereignis „clicked“ mit dem on_button_clicked-Methode, die „Hallo, Welt!“ ausgibt, wenn geklickt.
  • Der Hauptschleife der Anwendung wird durch Aufruf von Gtk.main() gestartet. Diese Schleife wartet auf Ereignisse (wie Klicks) und aktualisiert die Anwendung entsprechend.

Um die Anwendung auszuführen, gehe zu dem Verzeichnis, wo du die app.py Datei gespeichert hast, und führe den folgenden Befehl aus:

python3 app.py

Ein Fenster mit einem Button namens „Klicke mich“ erscheint. Wenn du auf den Button klickst, wird „Hallo, Welt!“ im Terminal ausgegeben.

PyGObject GUI Application

Mehr Funktionen zu deiner PyGObject-Anwendung hinzufügen

Lass uns nun unsere Anwendung erweitern, indem wir weitere Widgets und Interaktivität hinzufügen.

1. Ein Label hinzufügen

Wir können unsere Anwendung vergrößern, indem wir ein Gtk.Label hinzufügen, um Nachrichten im Fenster anzuzeigen, anstatt sie im Terminal auszugeben.

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

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Enhanced GUI App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create a label
        self.label = Gtk.Label(label="Press the button to see a message")
        vbox.pack_start(self.label, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

    def on_button_clicked(self, widget):
        self.label.set_text("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Erklärung der Änderungen:

  • Wir verwendeten Gtk.Box, um Widgets vertikal zu organisieren, was hilft, das Label und den Knopf nacheinander anzuordnen.
  • Das Gtk.Label-Widget wird hinzugefügt, um eine Nachricht innerhalb des Fensters anzuzeigen.
  • Statt die Ausgabe ins Terminal, aktualisiert die Funktion on_button_clicked nun den Text des Labels.
PyGObject GUI Application with Label

2. Eingabefelder für Benutzereingaben hinzufügen

Nächstes, füge Gtk.Entry-Widgets hinzu, um Benutzereingaben zu erlauben, was uns dazu bringen wird, eine einfache Anwendung zu erstellen, in der Benutzer ihr Name eingeben und einen Knopf klicken können, um ein personalisiertes Grüßchen anzuzeigen.

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

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="User Input App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Erklärung des Codes:

  • Das Gtk.Entry ist ein Eingabefeld, in dem Benutzer ihren Namen eingeben können.
  • Die Methode set_placeholder_text zeigt einen Hinweis innerhalb des Eingabefelds an, bis der Benutzer etwas eingibt.
  • Nach dem Klicken des Buttons wird der eingegebene Name mit `get_text()` abgerufen und im Label als personalisierte Begrüßung angezeigt.
PyGObject GUI Application with User Input

3. Styling Ihrer Anwendung mit CSS

Mit PyGObject können Sie benutzerdefinierte Stile auf Ihren Anwendungs-Widgets anwenden, indem Sie ein CSS-Datei verwenden, die `style.css` heißt.

window {
    background-color: #f0f0f0;
}

button {
    background-color: #4CAF50;
    color: white;
    border-radius: 5px;
    padding: 10px;
}

label {
    font-size: 16px;
    color: #333;
}

Nun ändern Sie den Python-Code, um diese CSS-Datei zu laden und anzuwenden:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Styled GUI App")
        self.set_size_request(400, 200)

        # Load CSS
        css_provider = Gtk.CssProvider()
        css_provider.load_from_path("style.css")
        screen = Gdk.Screen.get_default()
        style_context = Gtk.StyleContext()
        style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Erklärung der CSS-Änderungen:

  • Der Button hat einen grünen Hintergrund und die Labels haben eine benutzerdefinierte Schriftgröße und -farbe.
  • Die Kanten des Buttons sind abgerundet, um ein moderneres Aussehen zu erhalten.
PyGObject GUI Application with CSS Styling
Fazit

PyGObject ist ein kraftvolles Werkzeug für die Erstellung von grafischen Benutzeroberflächen auf dem Linux-Desktop mittels Python. Durch die Nutzung der Flexibilität und der Einfachheit von Python sowie den reichen Features von GTK können Entwickler funktionsreiche und optisch ansprechende Anwendungen schaffen.

In diesem Leitfaden haben wir die Grundlagen der Setup von PyGObject, die Erstellung einer einfachen Fenster, den Umgang mit Button-Klicks, die Hinzufügung von Benutzereingaben und sogar das Anwenden von benutzerdefinierten CSS-Stilen abgedeckt.

Sie können diese Beispiele erweitern, um komplexere Anwendungen zu bauen, wie z.B. Dateimanager, Medienwiedergabelisten oder sogar professionelle Software. Mit PyGObject und GTK sind die Möglichkeiten zur Erstellung von Desktopanwendungen fast unbegrenzt!

Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/