best counter
GNU/Linux. MuyLinux

Prográmate tu primera GUI en GNOME/GTK+

9/07/2010| por | 19 comentarios

Hola a todos chicos, ¿Cómo estais estos días de verano? Hoy os traigo un post que va dirigido a los desarrolladores novatos que quieran animarse a programar aplicaciones para GNU/Linux.

Imagen 4 500x305 Prográmate tu primera GUI en GNOME/GTK+

Si bien es cierto que hay aplicaciones por línea de comandos muy útiles tales como el comando find, wget, o uno al que diremos adiós en la próxima versión de Ubuntu (aptitude), la verdad es que el mundo del escritorio está basado en las GUIs o interfaces gráficas de usuario y es en estas últimas donde haremos una incursión en este artículo.

Para esta pequeña y rápida introducción haremos uso del lenguaje Python básicamente por su facilidad de entender/escribir, su amplia disponibilidad en entornos Linux y porque considero que es un lenguaje bastante acertado para empezar con esto de la programación.

También usaremos la herramienta Glade para generar el archivo XML que será nuestra bonita interfaz de usuario. Python ya debería estar instalado en vuestro sistema por defecto, y necesitaremos instalar las librerías de desarrollo para GTK+/PyGTK que encontraremos en nuestro gestor de paquetes preferido, normalmente con los nombres python-gtk2 y python-gtk2-dev. En el mismo gestor de paquete buscaremos también el diseñador de interfaces Glade, con el que generaremos la interfaz. Como veis, los preparativos son casi nulos y muy fáciles de cumplir.

Y ahora vamos al meollo. Como esto pretende ser una introducción bastante por encima, el ejemplo será sencillo y constará de una ventana con dos botones. Uno imprimirá el mensaje “Hola, esto es un ejemplo” en la terminal al ser pulsado, y el segundo cerrará la aplicación.

Empezaremos abriendo Glade, el cual nos recibirá con dos ventanas, la principal donde diseñaremos la interfaz, y un diálogo de preferencias sobre el proyecto que para nuestro objetivo podremos dejar tal y como vemos en la imagen de más abajo. Ahora si que si empezamos, seleccionando el widget Ventana en la categoría Niveles superiores en la “barra de herramientas” de la izquierda.

Imagen 1 Prográmate tu primera GUI en GNOME/GTK+

Esto creará un contenedor que será el padre de todos los demás widgets que usemos, es decir, será nuestra ventana de la aplicación. En las propiedades de la ventana (a la derecha de la aplicación) nos vamos a la pestaña Señales, y desplegando la opción GtkObject uniremos la señal destroy al manipulador gtk_main_quit. Esto lo que hará será que la aplicación sea “cerrable” sin necesidad de cerrar también la terminal que lo ejecute.

Imagen 2 500x285 Prográmate tu primera GUI en GNOME/GTK+

Vamos a añadir nuestros botonacos. Seleccionamos el widget Botonera horizontal en la categoría de Contenedores, y hacemos click dentro de nuestra ventana, lo que hará surgir un nuevo diálogo que nos pregunta cuantos elementos queremos mostrar, así que escribimos 2 y aceptamos. Aparecerá, efectivamente, un contenedor con espacio para dos botones, así que sin perder mucho tiempo seleccionamos el widget Botón en la categoría Control y exhibición, y damos un click en cada “agujero” del contenedor.

Seleccionando cada botón haciendo click sobre ellos, nos fijaremos de nuevo en sus propiedades. En la pestaña General yo he modificado la etiqueta o texto que mostrará cada botón pero lo podéis poner a vuestro gusto. Y de nuevo, en la pestaña de señales, conectaremos la señal clicked del primer botón al manipulador on_button1_clicked, aprovechando que ya viene en la lista de opciones predeterminadas.

Luego, en nuestro código, crearemos una función del mismo nombre, que será ejecutada cuando el botón envíe la señal clicked (Estas funciones se llaman retrollamadas). Para el segundo botón, conectaremos la misma señal al manipulador gtk_main_quit al igual que hicimos con la ventana.

Tened en cuenta que cada señal, al enviarse, ejecutará una función o retrollamada que tendrá que tener el nombre del manipulador que habéis especificado. Bueno, una vez hecho esto ya tenemos nuestra modesta interfaz, así que guardaremos el archivo con cualquier nombre que queramos.

Imagen 3 500x382 Prográmate tu primera GUI en GNOME/GTK+

Ahora viene el turno de la programación, y es que usando Python y PyGTK lo tenemos muy fácil, tanto que es casi mágico de lo sencillo que resulta. Prefiero pegaros el código “pelado” pues con comentarios y demás anotaciones esto se alargaría en exceso. Nuestro archivo tutorial.py quedaría de la siguiente manera:

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

class HelloWorld:

    def on_button1_clicked(self, widget, data=None):
        print 'Hola MuyLinux, esto es un ejemplo usando Glade y PyGTK'

    def gtk_main_quit(self, widget, data=None):
        gtk.main_quit()
        return False

    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file("tutorial.glade")
        self.window = builder.get_object("window1")
        builder.connect_signals(self)
        self.window.show()

def main():
    gtk.main()

if __name__=='__main__':
    h = HelloWorld()
    main()

Este archivo lo guardamos en la misma ubicación que nuestro archivo glade y para lanzarlo basta con abrir una terminal, movernos hasta la ubicación de ambos archivos y ejecutar lo siguiente:

python nombre_del_archivo.py

Lo que nos mostrará una pequeña ventana con dos botones, justo como la que hemos creado anteriormente.

Y hasta aquí llega esta pequeña introducción a la programación con GUIs sobre GNOME/GTK+. Espero que os haya gustado/servido y pronto espero hacer algo similar pero usando Qt para desarrollar aplicaciones gráficas sobre KDE ;).

Recordad que si quereis información más avanzada y una descripción completa de cada widget y función, siempre podeis acudir a la web de PyGTK o a la del proyecto GTK+ directamente. Sin mucho más que decir, un saludo y hasta la próxima muchachos.

Ah, por cierto, podeis bajaros tanto el archivo tutorial.glade como tutorial.py que he utilizado yo desde aquí.


Related posts:

  1. Tiny Backup: tú también puedes hacerlo
  2. Mate y BlueBubble: dos proyectos al rescate de GNOME 2
  3. Python 2.7, más aire para la serie 2.x de Python
  4. Primera versión de desarrollo de GNOME 3.0
  5. GNOME 3 dice adiós a los botones minimizar y maximizar [Actualizado]

Hay 19 comentarios

  1. 1
    Borisdsp dice:

    Bienvenido y felicidades por tu 2º entrada al blog. Tiene muy buena pinta. Saludos.

  2. 2
    prueba dice:

    Buf!!, menudo lio no. Yo he hecho interfaces graficas para comandos de consola similares a esa, con aplicaciones como xdialog, gtkdialog y alguna otra tambien para qt. Y no tengo ni idea de programar!!. Para lo que tu dices hay que saber un poquito mas. Para el que no sabe, les recomiendo programas tipo dialog como los que citaba. Saludos.

    • 3
      Garolard dice:

      Hola @prueba. Por lo que he visto, es cierto que gtkdialog es “más sencillo” de usar a priori, pero según lo que veo en su página web, también hace uso de libglade para crear, parsear y mostrar la GUI, y aún así hace falta saber algún lenguaje ya sea interpretado o compilado para que el programa haga algo.

      Yo quise centrarme en Glade (el diseñador, no la biblioteca) porque creo que para alguien novato y/o venido de windows es mucho más fácil acostumbrarse al diseño visual de la interfaz en lugar de codificar la interfaz a mano. Entiendeme, con conocimientos es perfectamente posible armarse una señora interfaz a base de puro código, pero si se quiere hacer rápido y de manera visual e intuitiva pienso que Glade es mejor opción.

      Además, recalcar el hecho de que gtkdialog parece usar libglade en vez de gtkbuilder, el cual está bastante mejor integrado en el escritorio gnome que el primero.

      En resumen, tambien pienso que las interfaces sencillas se podrían hacer mejor codificándolas, pero cuando el proyecto alcanza cierta magnitud, a la larga compensa tener la interfaz separada del código en archivos .glade o .ui

  3. 4
    jalp dice:

    Mola, a ver si tengo algo de tiempo y me lanzo a crear alguna gui. Se me ocurre quizás hacer algo para configurar los botones de minimizar, maximizar y cerrar, ponerlos a izquierda/derecha, etc. :D

  4. 5
    Lendon dice:

    Buen curro. Desde luego ha sido una gran idea incorporar colaboradores, MuyLinux está mejorando mucho.

    • 11
      LaMu dice:

      Empiezo a tener esa misma percepción :)

  5. 6
    mentOS dice:

    Un post que llevaba tiempo esperando, enhorabuena

  6. 7
    €quiman dice:

    Orale muy bueno… por fin no es Muy OMG! propgramo en PHP pero me pico el cuento de aprender Python con este post.

    Que bien la incursión de los nuevos colaboradores, le dio un respiro a Muy OMG… eh perdon Muy Linux.

  7. 8
    alexis dice:

    Buen post

  8. 9
    Bruno dice:

    Felicitaciones! Soy apasionado por el mundo Linux y la programación y me pareció muy interesante el post. Solo tengo experiencia con Swing pero últimamente estoy informándome sobre las librerías Qt, estaremos esperando ansiosamente dicho post.

  9. 10
    pichulines dice:

    otra idea: zenity

  10. 12
    ArmandiuxGS dice:

    Interesante, intentare hacer una prueba…
    ;)

  11. 13
    valeri0 dice:

    mas entradas de este tipo!

  12. 14
    Bill Gates dice:

    Excelente post!!!

    Me gustaria que hicieran muchos mas tutoriales de Gale y algunos de Qt, para abarcar python y C++.

    Thanks!

  13. 15
    Wall2 dice:

    Excelente post…. me ha llamado mucho la atencion…. lo pondre en practica ahora mismo… muchas gracias

  14. 16

    [...] Prográmate tu primera GUI en GNOME/GTK+ [...]

  15. 17
    dv dice:

    Hola, la idea me ha parecido muy buena, pero agradeceria uno igual solo que con C++

  16. 18
    jalp dice:

    A mi me gustaría empezar a toquetear Vala, a ver si tengo tiempo y le doy una oportunidad.

  17. 19
    Mandy dice:

    Para los amantes de php pueden usar phpGTK+. He probado muchos (Vala, Mono, …) y el que más me ha gustado ha sido el IDE Lazarus (Free Pascal) que es Free Software. Si conoces Borland Delphi o Kylix, te emocionarás de tan hermosa herramienta.

Escribe tu comentario