PyGObject : Un guide pour créer des applications GUI Python sur Linux

Créer des applications avec interface graphique (GUI) est un excellent moyen de donner vie à vos idées et de rendre vos programmes plus conviviaux.

PyGObject est une bibliothèque Python qui permet aux développeurs de créer des applications GUI sur les bureaux Linux en utilisant le framework GTK (GIMP Toolkit). GTK est largement utilisé dans les environnements Linux, alimentant de nombreuses applications de bureau populaires comme Gedit, GNOME terminal, et plus encore.

Dans cet article, nous allons explorer comment créer des applications GUI sous un environnement de bureau Linux en utilisant PyGObject. Nous commencerons par comprendre ce qu’est PyGObject, comment l’installer, puis nous passerons à la création d’une application GUI simple.

Étape 1 : Installer Python et GTK sous Linux

Pour travailler avec PyGObject, vous devez avoir Python installé et la plupart des distributions Linux actuelles viennent avec Python préinstallé, mais vous pouvez confirmer en exécutant :

python3 --version

Python 3.12.3

Si Python n’est pas installé, vous pouvez l’installer en utilisant la commande appropriée pour votre distribution Linux spécifique.

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]    

Maintenant, vous devez installer les liaisons PyGObject pour Python, ainsi que les bibliothèques de développement 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] 

Étape 2 : Installation de PyGObject sous Linux

Une fois Python et les bibliothèques de développement de GTK installées, vous pouvez maintenant installer PyGObject en utilisant le commande approprié pour votre distribution Linux spécifique.

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]    

Après l’installation, vous êtes prêt à commencer à développer des applications avec interface graphique en utilisant PyGObject et GTK.

Création de la première application avec PyGObject sous Linux

Maintenant, construisons une simple application avec PyGObject qui affiche une fenêtre avec un bouton. Lorsque le bouton est cliqué, il affiche un message disant, “Bonjour, le monde!“.

Créez un fichier Python appelé app.py, et commençons à écrire la structure de base de notre application 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()

Explication du code :

  • Les deux premières lignes importent les modules PyGObject nécessaires. Nous spécifions la version de GTK que nous voulons utiliser (3.0 dans ce cas).
  • La classe MyApp hérite de Gtk.Window, qui représente la fenêtre principale de l’application.
  • Nous créons un bouton en utilisant Gtk.Button, et l’étiquette du bouton est définie comme “Cliquez sur moi“. Nous connectons également le signal “clicked” du bouton à la méthode on_button_clicked, qui affiche “Bonjour, le monde!“ lorsque cliqué.
  • Le bouclier principal de l’application est démarré en appelant Gtk.main(). Ce loop attend les événements (comme les clics) et met à jour l’application correspondante.

Pour lancer l’application, naviguez vers le répertoire où vous avez enregistré le fichier app.py et exécutez la commande suivante :

python3 app.py

Une fenêtre apparaîtra avec un bouton intitulé “Cliquez ici“. Lorsque vous cliquez sur le bouton, “Hello, World!” sera affiché dans le terminal.

PyGObject GUI Application

Ajouter Plus de Fonctionnalités à Votre Application PyGObject

Faisons maintenant évoluer notre application en ajoutant plus d’éléments graphiques et d’interactivité.

1. Ajout d’une Étiquette

Nous pouvons améliorer notre application en ajoutant un Gtk.Label pour afficher des messages dans la fenêtre plutôt que de les imprimer dans le terminal.

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

Explication des Changements:

  • Nous avons utilisé Gtk.Box pour organiser les éléments graphiques verticalement, ce qui nous aide à arranger l’étiquette et le bouton l’un après l’autre.
  • Le widget Gtk.Label est ajouté pour afficher un message à l’intérieur de la fenêtre.
  • Au lieu d’imprimer dans le terminal, la fonction on_button_clicked met maintenant à jour le texte de l’étiquette.
PyGObject GUI Application with Label

2. Ajout de Champs de saisie pour la Saisie Utilisateur

Ensuite, ajoutons des widgets Gtk.Entry pour permettre la saisie utilisateur, ce qui nous permettra de créer une application simple où les utilisateurs peuvent saisir leur nom et cliquer sur un bouton pour afficher un message de salutation personnalisé.

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

Explication du Code:

  • Le Gtk.Entry est un champ de saisie où les utilisateurs peuvent taper leur nom.
  • La méthode set_placeholder_text affiche une indication à l’intérieur de la boîte de saisie jusqu’à ce que l’utilisateur tape quelque chose.
  • Après avoir cliqué sur le bouton, le nom entré est récupéré à l’aide de get_text() et affiché dans l’étiquette comme un salutation personnalisée.
PyGObject GUI Application with User Input

3. Personnaliser l’apparence de votre application avec CSS

PyGObject permet de personnaliser l’apparence des widgets de votre application en utilisant un fichier CSS nommé style.css.

window {
    background-color: #f0f0f0;
}

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

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

Maintenant, modifiez le code Python pour charger et appliquer ce fichier 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()

Explication des modifications CSS :

  • Le bouton a un arrière-plan vert, et les étiquettes ont une police personnalisée de taille et de couleur.
  • Les bordures arrondies du bouton donnent un aspect moderne.
PyGObject GUI Application with CSS Styling
Conclusion

PyGObject est une puissante toolkit pour la création d’applications avec interface graphique (GUI) sur le bureau Linux en utilisant Python. En exploitant la flexibilité et la simplicité de Python, ainsi que les riches fonctionnalités de GTK, les développeurs peuvent créer des applications riches en fonctions et attrayantes visuellement.

Dans ce guide, nous avons couvert les bases du setup de PyGObject, de la création d’une fenêtre simple, de la gestion des clics de bouton, de l’ajout d’entrées utilisateur, et même de l’application de styles CSS personnalisés.

Vous pouvez étendre ces exemples pour construire des applications plus complexes, telles que gestionnaires de fichiers, lecteurs de médias, ou même des logiciels professionnels de qualité. Avec PyGObject et GTK, les possibilités de création d’applications de bureau sont presque illimitées !

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