Website-Suche

So erstellen Sie GUI-Anwendungen unter Linux mit PyGObject


Das Erstellen von Anwendungen mit grafischer Benutzeroberfläche (GUI) ist eine fantastische Möglichkeit, Ihre Ideen zum Leben zu erwecken und Ihre Programme benutzerfreundlicher zu gestalten.

PyGObject ist eine Python-Bibliothek, die es Entwicklern ermöglicht, GUI-Anwendungen auf Linux-Desktops mit dem GTK-Framework (GIMP Toolkit) zu erstellen. GTK ist in Linux-Umgebungen weit verbreitet und unterstützt viele beliebte Desktop-Anwendungen wie Gedit, GNOME-Terminal und mehr.

In diesem Artikel werden wir untersuchen, wie Sie GUI-Anwendungen in einer Linux-Desktop-Umgebung mit PyGObject erstellen. Wir beginnen damit, zu verstehen, was PyGObject ist, wie man es installiert, und fahren dann mit dem Erstellen einer einfachen GUI-Anwendung fort.

Schritt 1: Installieren von Python und GTK unter Linux

Um mit PyGObject arbeiten zu können, müssen Sie Python installiert haben und die meisten heutigen Linux-Distributionen haben Python vorinstalliert, aber Sie können dies bestätigen, indem Sie Folgendes ausführen:

python3 --version

Python 3.12.3

Wenn Python nicht installiert ist, können Sie es mit dem folgenden entsprechenden Befehl für Ihre spezifische Linux-Distribution 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]    

Jetzt müssen Sie die PyGObject-Bindungen für Python sowie die GTK-Entwicklungsbibliotheken installieren.

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: Installation von PyGObject unter Linux

Nachdem die Python- und GTK-Entwicklungsbibliotheken installiert sind, können Sie PyGObject jetzt mit dem folgenden entsprechenden Befehl für Ihre spezifische 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 können Sie mit der Entwicklung von GUI-Anwendungen mit PyGObject und GTK beginnen.

Erstellen der ersten PyGObject-GUI-Anwendung unter Linux

Lassen Sie uns nun eine einfache PyGObject-Anwendung erstellen, die ein Fenster mit einer Schaltfläche anzeigt. Wenn Sie auf die Schaltfläche klicken, wird die Meldung "Hallo, Welt!“.

Erstellen Sie eine Python-Datei mit dem Namen app.py, und beginnen wir mit dem Schreiben der Grundstruktur 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()

Erläuterung des Kodex:

  • Die ersten beiden Zeilen importieren die notwendigen PyGObject-Module. Wir geben die GTK-Version an, die wir verwenden möchten (in diesem Fall 3.0).
  • Die MyApp-Klasse erbt von Gtk.Window, das das Hauptfenster der Anwendung darstellt.
  • Wir erstellen eine Schaltfläche mit Gtk.Button, und die Beschriftung der Schaltfläche ist auf "Click Me" festgelegt. Wir verbinden auch das "Geklickt"-Signal der Schaltfläche mit der on_button_clicked Methode, die "Hallo, Welt!", wenn Sie darauf klicken.
  • Die Hauptschleife der Anwendung wird durch den Aufruf von Gtk.main() gestartet. Diese Schleife wartet auf Ereignisse (z. B. Klicks) und aktualisiert die Anwendung entsprechend.

Navigieren Sie zum Ausführen der Anwendung zu dem Verzeichnis, in dem Sie die app.py Datei gespeichert haben, und führen Sie den folgenden Befehl aus:

python3 app.py

Es erscheint ein Fenster mit einer Schaltfläche mit der Bezeichnung "Klick mich". Wenn Sie auf die Schaltfläche "Hallo, Welt!" wird im Terminal gedruckt.

Hinzufügen weiterer Funktionen zu Ihrer PyGObject-Anwendung

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

1. Hinzufügen eines Labels

Wir können unsere Anwendung verbessern, indem wir ein Gtk.Label hinzufügen, um Nachrichten im Fenster anzuzeigen, anstatt sie im Terminal zu drucken.

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()

Erläuterung der Änderungen:

  • Wir haben Gtk.Box verwendet, um Widgets vertikal zu organisieren, was uns hilft, die Beschriftung und den Button nacheinander anzuordnen.
  • Das Gtk.Label-Widget wird hinzugefügt, um eine Meldung im Fenster anzuzeigen.
  • Anstatt auf das Terminal zu drucken, aktualisiert die Funktion on_button_clicked jetzt den Text des Etiketts.

2. Hinzufügen von Eingabefeldern für die Benutzereingabe

Als Nächstes fügen wir Gtk.Entry-Widgets hinzu, um Benutzereingaben zu ermöglichen, die es uns ermöglichen, eine einfache Anwendung zu erstellen, in der Benutzer ihren Namen eingeben und auf eine Schaltfläche klicken können, um eine personalisierte Begrüßung 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()

Erläuterung des Kodex:

  • Der Gtk.Entry ist ein Eingabefeld, in das Benutzer ihren Namen eingeben können.
  • Die set_placeholder_text-Methode zeigt einen Hinweis im Eingabefeld an, bis der Benutzer etwas eingibt.
  • Nach Klick auf den Button wird der eingegebene Name mittels get_text() abgerufen und im Etikett als personalisierte Begrüßung angezeigt.

3. Formatieren Ihrer Anwendung mit CSS

PyGObject ermöglicht es Ihnen, benutzerdefinierte Stile auf Ihre Anwendungs-Widgets anzuwenden, indem Sie eine CSS-Datei namens style.css verwenden.

window {
    background-color: #f0f0f0;
}

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

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

Ändern Sie nun 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:

  • Die Schaltfläche hat einen grünen Hintergrund, und die Beschriftungen haben eine benutzerdefinierte Schriftgröße und -farbe.
  • Die Ränder des Buttons sind abgerundet, um einen modernen Look zu erzielen.

Schlussfolgerung

PyGObject ist ein leistungsstarkes Tool zum Erstellen von GUI-Anwendungen auf dem Linux-Desktop mit Python. Durch die Nutzung der Flexibilität und Einfachheit von Python zusammen mit den umfangreichen Funktionen von GTK können Entwickler funktionsreiche und visuell ansprechende Anwendungen erstellen.

In diesem Leitfaden haben wir die Grundlagen zum Einrichten von PyGObject, zum Erstellen eines einfachen Fensters, zum Umgang mit Schaltflächenklicks, zum Hinzufügen von Benutzereingaben und sogar zum Anwenden benutzerdefinierter CSS-Stile behandelt.

Sie können diese Beispiele erweitern, um komplexere Anwendungen zu erstellen, z. B. Dateimanager, Mediaplayer oder sogar professionelle Software. Mit PyGObject und GTK sind die Möglichkeiten zur Erstellung von Desktop-Anwendungen nahezu unbegrenzt!

Verwandte Artikel: