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-Klasseerbt vonGtk.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 deron_button_clickedMethode, 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.Boxverwendet, um Widgets vertikal zu organisieren, was uns hilft, die Beschriftung und den Button nacheinander anzuordnen. - Das
Gtk.Label-Widgetwird hinzugefügt, um eine Meldung im Fenster anzuzeigen. - Anstatt auf das Terminal zu drucken, aktualisiert die Funktion
on_button_clickedjetzt 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.Entryist ein Eingabefeld, in das Benutzer ihren Namen eingeben können. - Die
set_placeholder_text-Methodezeigt 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!



