PyGObject: Una Guida per Creare Applicazioni GUI Python su Linux

Creare applicazioni con interfaccia grafica utente (GUI) è un modo fantastico per dare vita alle tue idee e rendere i tuoi programmi più user-friendly.

PyGObject è una libreria Python che permette agli sviluppatori di creare applicazioni GUI sui desktop Linux utilizzando il framework GTK (GIMP Toolkit). GTK è ampiamente utilizzato negli ambienti Linux, alimentando molte popolari applicazioni desktop come Gedit, terminale GNOME e altre.

In questo articolo, esploreremo come creare applicazioni GUI in un ambiente desktop Linux utilizzando PyGObject. Inizieremo comprendendo cos’è PyGObject, come installarlo e procederemo poi alla costruzione di una semplice applicazione GUI.

Passo 1: Installare Python e GTK in Linux

Per lavorare con PyGObject, è necessario avere Python installato e la maggior parte delle distribuzioni Linux attuali includono Python preinstallato, ma puoi confermare eseguendo:

python3 --version

Python 3.12.3

Se Python non è installato, puoi farlo utilizzando il seguente comando appropriato per la tua distribuzione Linux specifica.

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]    

Ora devi installare i collegamenti PyGObject per Python, così come le librerie di sviluppo GTK.

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] 

Passo 2: Installazione di PyGObject in Linux

Una volta installate le librerie di sviluppo di Python e GTK, è possibile installare PyGObject usando il seguente comando appropriato per la distribuzione Linux specifica.

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]    

Dopo l’installazione, sei pronto per iniziare a sviluppare applicazioni GUI utilizzando PyGObject e GTK.

Creazione della prima applicazione GUI PyGObject in Linux

Ora, creiamo un’applicazione PyGObject semplice che visualizza una finestra con un pulsante. Quando si clicca sul pulsante, verrà visualizzato un messaggio che dice “Ciao, Mondo!“.

Crea un file Python chiamato app.py, e iniziamo a scrivere la struttura di base della nostra applicazione PyGObject.

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

Spiegazione del codice:

  • Le prime due righe importano i moduli necessari di PyGObject. Specifichiamo la versione di GTK che vogliamo utilizzare (3.0 in questo caso).
  • La classe MyApp eredita da Gtk.Window, che rappresenta la finestra principale dell’applicazione.
  • Creiamo un pulsante utilizzando Gtk.Button, e l’etichetta del pulsante è impostata su “Clicca qui“. Connettiamo anche il segnale “clicked” del pulsante al metodo on_button_clicked, che stampa “Ciao, Mondo!” quando viene cliccato.
  • Il ciclo principale dell’applicazione viene avviato chiamando Gtk.main(). Questo ciclo attende eventi (come i clic) e aggiorna l’applicazione di conseguenza.

Per eseguire l’applicazione, navigare nella directory in cui hai salvato il file app.py e eseguire il seguente comando:

python3 app.py

Apparirà una finestra con un pulsante etichettato “Cliccami“. Quando fai clic sul pulsante, “Ciao, Mondo!” verrà stampato nel terminale.

PyGObject GUI Application

Aggiunta di più funzionalità alla tua applicazione PyGObject

Ora amplieremo il nostro applicazione aggiungendo più widget e interattività.

1. Aggiunta di un’etichetta

Potremmo migliorare la nostra applicazione aggiungendo un Gtk.Label per mostrare messaggi nella finestra invece di stamparli nel terminale.

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

Spiegazione delle modifiche:

  • Usiamo Gtk.Box per organizzare i widget in modo verticale, che ci aiuta a disporre l’etichetta e il pulsante uno dopo l’altro.
  • Il widget Gtk.Label è aggiunto per mostrare un messaggio all’interno della finestra.
  • Invece di stampare nel terminale, la funzione on_button_clicked ora aggiorna il testo dell’etichetta.
PyGObject GUI Application with Label

2. Aggiunta di campi di immissione per l’input utente

Prossimamente, aggiungiamo widget Gtk.Entry per consentire l’input utente, che ci permetterà di creare una semplice applicazione dove gli utenti possono inserire il loro nome e fare clic su un pulsante per mostrare un saluto personalizzato.

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

Spiegazione del codice:

  • Il Gtk.Entry è un campo di input dove gli utenti possono digitare il loro nome.
  • Il metodo set_placeholder_text mostra un suggerimento all’interno della casella di input finché l’utente non inserisce nulla.
  • Dopo aver cliccato il pulsante, il nome immesso viene recuperato utilizzando get_text() ed è visualizzato nella label come un saluto personalizzato.
PyGObject GUI Application with User Input

3. Stile del tuo applicazione con CSS

PyGObject ti permette di applicare stili personalizzati ai widget dell’applicazione utilizzando un file CSS chiamato style.css.

window {
    background-color: #f0f0f0;
}

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

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

Ora, modifica il codice Python per caricare e applicare questo file CSS:

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

Spiegazione delle modifiche CSS:

  • Il pulsante ha un sfondo verde, mentre le label hanno un carattere personalizzato di dimensioni e colore.
  • I bordi del pulsante sono arrotondati per un aspetto moderno.
PyGObject GUI Application with CSS Styling
Conclusione

PyGObject è uno strumento potente per la creazione di applicazioni GUI sul desktop Linux utilizzando Python. Utilizzando la flessibilità e la semplicità di Python insieme alle caratteristiche ricche di GTK, i sviluppatori possono creare applicazioni dotate di numerose funzioni e con un aspetto grafico piacevole.

In questo guida, abbiamo approfondito i fondamenti della configurazione di PyGObject, la creazione di una semplice finestra, il handling dei click del pulsante, l’aggiunta dell’input utente e persino l’applicazione di stili CSS personalizzati.

Potrai estendere questi esempi per costruire applicazioni più complesse, come gestori di file, media players o addirittura software a livello professionale. Con PyGObject e GTK, le possibilità di creare applicazioni desktop sono quasi illimitate!

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