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 daGtk.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 metodoon_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.

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.

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.

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.

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/