PyGObject: Een Gids voor het Maken van Python GUI Applicaties op Linux

Het maken van grafische gebruikersinterface (GUI) applicaties is een fantastische manier om je ideeën tot leven te brengen en je programma’s gebruiksvriendelijker te maken.

PyGObject is een Python-bibliotheek waarmee ontwikkelaars GUI-applicaties kunnen maken op Linux-desktops met behulp van het GTK (GIMP Toolkit) framework. GTK wordt veel gebruikt in Linux-omgevingen en drijft veel populaire desktopapplicaties aan zoals Gedit, GNOME-terminal, en meer.

In dit artikel zullen we verkennen hoe je GUI-applicaties kunt maken onder een Linux-desktopomgeving met behulp van PyGObject. We beginnen met het begrijpen wat PyGObject is, hoe je het installeert, en gaan vervolgens verder met het bouwen van een eenvoudige GUI-applicatie.

Stap 1: Python en GTK installeren in Linux

Om met PyGObject te werken, moet je Python geïnstalleerd hebben en de meeste Linux-distributies van vandaag worden geleverd met Python voorgeïnstalleerd, maar je kunt dit bevestigen door het volgende commando uit te voeren:

python3 --version

Python 3.12.3

Als Python niet is geïnstalleerd, kun je dit doen met het juiste commando voor jouw specifieke Linux-distributie.

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]    

Vervolgens moet je de PyGObject bindings voor Python en de GTK ontwikkelingsbibliotheken installeren.

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] 

Step 2: Installatie van PyGObject in Linux

Als Python en GTK-ontwikkelingsbibliotheken zijn geïnstalleerd, kun je nu PyGObject installeren met de geschikte opdracht voor jouw Linux-distributie.

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]    

Nadat de installatie is voltooid, ben je klaar om GUI-toepassingen te ontwikkelen met behulp van PyGObject en GTK.

Creëer je eerste PyGObject GUI-toepassing in Linux

Laat ons nu een eenvoudige PyGObject-toepassing maken die een venster met een knop weergeeft. Als de knop wordt geklikt, wordt het bericht “Hello, World!“ weergegeven.

Maak een Python-bestand genaamd app.py en begin met het schrijven van de basisstructuur van onze PyGObject-toepassing.

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

Uitleg van de code:

  • De eerste twee regels importeren de noodzakelijke PyGObject-modules. We specificeren de gewenste GTK-versie (3.0 in dit geval).
  • De klasse MyApp erven van Gtk.Window, die het hoofdvenster van de toepassing vertegenwoordigt.
  • We maken een knop met behulp van Gtk.Button en stellen de knoplabel in op “Klik Mij“. We verbinden ook het signaal “clicked” van de knop met de methode on_button_clicked, die “Hello, World!” afdrukt als deze wordt geklikt.
  • De hoofdloop van de toepassing wordt gestart door Gtk.main() aan te roepen. Deze loop wacht op gebeurtenissen (zoals klikken) en update de toepassing daaraan gelegenheid biedend.

Om de applicatie te starten, navigeer naar de map waar je het bestand app.py hebt opgeslagen en voer het volgende commando uit:

python3 app.py

Een venster zal verschijnen met een knop die “Klik Hier” heet. Wanneer je op de knop klikt, zal “Hello, World!” in de terminal worden afgedrukt.

PyGObject GUI Application

Meer functionaliteit toevoegen aan je PyGObject-applicatie

Laten we nu onze applicatie uitbreiden door meer widgets en interactiviteit toe te voegen.

1. Een Label toevoegen

We kunnen onze applicatie verbeteren door een Gtk.Label toe te voegen om berichten in het venster weer te geven in plaats van ze in de terminal af te drukken.

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

Uitleg van de wijzigingen:

  • We gebruikten Gtk.Box om widgets verticaal te organiseren, wat ons helpt de label en de knop na elkaar te plaatsen.
  • De widget Gtk.Label wordt toegevoegd om een bericht binnenin het venster weer te geven.
  • In plaats van naar de terminal te printen, update nu de functie on_button_clicked de tekst van het label.
PyGObject GUI Application with Label

2. Invoervelden toevoegen voor gebruikersinvoer

Volgende, laten we Gtk.Entry-widgets toevoegen om gebruikersinvoer mogelijk te maken, wat ons in staat zal stellen een eenvoudige applicatie te maken waarin gebruikers hun naam kunnen invoeren en op een knop kunnen klikken om een persoonlijke groet weer te geven.

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

Uitleg van de code:

  • Gtk.Entry is een invoerveld waar gebruikers hun naam kunnen typen.
  • De methode set_placeholder_text toont een hint binnen het invoerveld totdat de gebruiker iets typt.
  • Na het klikken op de knop wordt de ingevoerde naam opgehaald met get_text() en weergegeven in het label als een gepersonaliseerde begroeting.
PyGObject GUI Application with User Input

3. Uw applicatie stylen met CSS

PyGObject stelt u in staat om aangepaste stijlen toe te passen op uw applicatiewidgets met behulp van een CSS-bestand genaamd style.css.

window {
    background-color: #f0f0f0;
}

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

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

Wijzig nu de Python-code om dit CSS-bestand te laden en toe te passen:

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

Uitleg van de CSS-wijzigingen:

  • De knop heeft een groene achtergrond en labels hebben een aangepaste lettergrootte en kleur.
  • De randen van de knop zijn afgerond voor een moderne uitstraling.
PyGObject GUI Application with CSS Styling
Conclusie

PyGObject is een krachtige tool voor het maken van GUI-applicaties op het Linux-bureaublad met behulp van Python. Door gebruik te maken van de flexibiliteit en eenvoud van Python samen met de uitgebreide functies van GTK, kunnen ontwikkelaars functierijke en visueel aantrekkelijke applicaties creëren.

In deze handleiding hebben we de basisprincipes behandeld van het opzetten van PyGObject, het maken van een eenvoudig venster, het afhandelen van knopklikken, het toevoegen van gebruikersinvoer en zelfs het toepassen van aangepaste CSS-stijlen.

U kunt deze voorbeelden uitbreiden om meer complexe applicaties te bouwen, zoals bestandsbeheerders, mediaspelers, of zelfs professionele software. Met PyGObject en GTK zijn de mogelijkheden voor het maken van desktopapplicaties bijna onbeperkt!

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