PyGObject: Una guía para crear aplicaciones GUI en Python en Linux

La creación de aplicaciones de interfaz gráfica (GUI) es una forma fantástica de hacer realidad tus ideas y hacer que tus programas sean más amigables para el usuario.

PyGObject es una biblioteca de Python que permite a los desarrolladores crear aplicaciones de GUI en entornos de escritorio Linux utilizando el framework GTK (GIMP Toolkit). GTK es ampliamente utilizado en entornos Linux, impulsando muchas aplicaciones de escritorio populares como Gedit, terminal GNOME, y más.

En este artículo, exploraremos cómo crear aplicaciones de GUI en un entorno de escritorio Linux utilizando PyGObject. Empezaremos entendiendo qué es PyGObject, cómo instalarlo, y luego procederemos a construir una aplicación de GUI simple.

Paso 1: Instalar Python y GTK en Linux

Para trabajar con PyGObject, necesitas tener Python instalado y la mayoría de las distribuciones de Linux de hoy en día vienen con Python preinstalado, pero puedes confirmar ejecutando:

python3 --version

Python 3.12.3

Si Python no está instalado, puedes instalarlo utilizando el siguiente comando apropiado para tu distribución de Linux específica.

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]    

Ahora, necesitas instalar las ataduras PyGObject para Python, así como las bibliotecas de desarrollo de 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] 

Step 2: Instalación de PyGObject en Linux

Una vez que se hayan instalado Python y las bibliotecas de desarrollo de GTK, ahora puedes instalar PyGObject usando el siguiente comando apropiado para tu distribución de Linux específica.

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]    

Después de la instalación, estás listo para comenzar a desarrollar aplicaciones de interfaz gráfica usando PyGObject y GTK.

Creación de la Primera Aplicación de Interfaz Gráfica con PyGObject en Linux

Ahora, vamos a construir una aplicación PyGObject sencilla que muestre una ventana con un botón. Cuando se haga clic en el botón, mostrará un mensaje que dice, “Hola, Mundo!“.

Crea un archivo de Python llamado app.py, y comencemos a escribir la estructura básica de nuestra aplicación 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()

Explicación del Código:

  • Las primeras dos líneas importan los módulos necesarios de PyGObject. Especificamos la versión de GTK que queremos usar (3.0 en este caso).
  • La clase MyApp hereda de Gtk.Window, que representa la ventana principal de la aplicación.
  • Creamos un botón usando Gtk.Button, y la etiqueta del botón se establece en “Clicame“. También conectamos la señal “clicked” del botón a el método on_button_clicked, que imprime “Hola, Mundo!” al hacer clic.
  • El bucle principal de la aplicación se inicia llamando a Gtk.main(). Este bucle espera por eventos (como clics) y actualiza la aplicación en consecuencia.

Para ejecutar la aplicación, vaya a la carpeta donde guardó el archivo app.py y ejecute el siguiente comando:

python3 app.py

Aparecerá una ventana con un botón etiquetado “Click Me“. Cuando hace clic en el botón, “Hello, World!” se imprimirá en la terminal.

PyGObject GUI Application

Agregando Más Características a Su Aplicación PyGObject

Ahora vamos a ampliar nuestra aplicación agregando más widgets y interactividad.

1. Agregar una Etiqueta

Podemos mejorar nuestra aplicación agregando una Gtk.Label para mostrar mensajes en la ventana en lugar de imprimirlos en la 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()

Explicación de los Cambios:

  • Usamos Gtk.Box para organizar widgets verticalmente, lo que nos ayuda a organizar la etiqueta y el botón uno detrás de el.
  • El widget Gtk.Label se agrega para mostrar un mensaje dentro de la ventana.
  • En lugar de imprimir en la terminal, la función on_button_clicked actualiza ahora el texto de la etiqueta.
PyGObject GUI Application with Label

2. Agregar Campos de Entrada para Ingreso de Usuario

A continuación, agreguemos widgets Gtk.Entry para permitir el ingreso de usuario, lo que nos permitirá crear una aplicación simple donde los usuarios pueden ingresar su nombre y hacer clic en un botón para mostrar una saluda personalizada.

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

Explicación del Código:

  • El Gtk.Entry es un campo de entrada donde los usuarios pueden escribir su nombre.
  • El método set_placeholder_text muestra un indicio dentro del cuadro de entrada hasta que el usuario escribe algo.
  • Después de hacer clic en el botón, el nombre ingresado es recuperado mediante get_text() y se muestra en la etiqueta como un saludo personalizado.
PyGObject GUI Application with User Input

3. Estilizar su aplicación con CSS

PyGObject le permite aplicar estilos personalizados a los widgets de su aplicación mediante un archivo CSS llamado style.css.

window {
    background-color: #f0f0f0;
}

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

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

Ahora, modifique el código de Python para cargar y aplicar este archivo 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()

Explicación de los cambios en CSS:

  • El botón tiene un fondo verde, y las etiquetas tienen un tamaño de fuente y color personalizados.
  • Los bordes del botón están redondeados para un aspecto moderno.
PyGObject GUI Application with CSS Styling
Conclusión

PyGObject es una herramienta poderosa para crear aplicaciones de escritorio con interfaz gráfica en Linux utilizando Python. Aprovechando la flexibilidad y simplicidad de Python, junto con las característicasricoas de GTK, los desarrolladores pueden crear aplicaciones con funciones avanzadas y de aspecto atractivo.

En este guía, cubrimos los conceptos básicos para configurar PyGObject, crear una ventana simple, manejar los clics en los botones, agregar entrada de usuario e incluso aplicar estilos CSS personalizados.

Puede extendere estos ejemplos para construir aplicaciones más complejas, como gestores de archivos, reproductores de medios o incluso software profesional de alta calidad. Con PyGObject y GTK, las posibilidades para crear aplicaciones de escritorio son casi ilimitadas!

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