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 deGtk.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étodoon_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.

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.

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.

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.

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/