Aplicaciones de escritorio GUI con Ruby
Programas con interfaz gráfica con Ruby
Esta entrada quiero hablar de un tema muy concreto que la gente suele preguntarme ocasionalmente, y es si es posible realizar programas con interfaz gráfica con el lenguaje de programación Ruby, la respuesta es sí.
Para hacerlo debemos por supuesto conocer el lenguaje de programación Ruby (muy orientado a objetos) y además las librerías que nos permiten realizar aplicaciones de escritorio visuales, a continuación paso a nombrar las más conocidas:
- Ruby GTK
- Shoes
- FxRuby
- Zenity
- VisualRuby
- QtRuby
- SharedDevelop
Tenemos librerías visuales donde elegir, pero nosotros nos vamos a decantar por mostrarte en esta entrada Ruby GTK(The GIMP Toolkit), como hemos comentado antes es un conjunto de librería GUI que podemos impletar en nuestros programas. El motivo de escoger Ruby GTK entre las demás es sobretodo por la documentación existente y como valor añadido el resultado final de nuestras aplicaciones. Si eres programador en Java y has utilizado librerías gráficas podrás comprobar que la estructura de composición es muy parecida a la hora de crear nuestras ventanas y elementos que la componen.
Instalación de GTK
La instalación es bien sencilla, simplemente tenemos que introducir en el terminal o CMD la gema que deseamos instalar en nuestro caso GTK2.
gem install gtk2
Simple y sencillo como cualquier otra gema del mundo Ruby.
Conceptos básicos
Vamos a realizar una pequeña aplicación paso a paso y explicando el significado de cada uno de las líneas de código que implementemos. En primer lugar abre tu editor preferido que vamos ‘al lío!’. En nuestra primera línea poco que comentar, simplemente incorporamos la librería GTK, y en la segunda línea llamamos a las funciones necesarias para hacer funcionar las herramientas gráficas con GTK.init.
require 'gtk2' GTK.init
Llegados a este punto podemos generar nuestra primera ventana, en definitiva es donde iremos incorporando todo lo elementos necesarios para realizar nuestro programa. En primer lugar creamos una instancia de la ventana gráfica y a el objeto «ventana» vamos llamando métodos o atributos para asignarles los valores que deseamos, en el ejemplo le indicamos el nombre de la ventana creada, tamaño y la posición de esta. Podemos ver todos los atributos en la documentación de esta aquí
ventana = Gtk::Window.new ventana.set_title "Mi primera ventana" ventana.set_default_size 500, 500 ventana.set_window_position Gtk::Window::Position::CENTER ventana.show Gtk.main
La penúltima línea «ventana.show» es la más importante y la que a los novatos suele olvidarse de introducir, llevando a quebraderos de cabezas de no ver su preciosa ventana generada. Su función es muestrar la ventana por pantalla, si llamar a ella no veríamos el resultado del código.
En la última línea tenemos «gtk.main», llamando a la función principal y generando un bucle hasta que en el código se encuentre «gtk.main_quit» y salga de nuestro programa. En nuestro programa carecemos del código para salir de la aplicación.
Si ejecutamos nuestro primer programa, te mostrará una ventana en el centro de la pantalla, con el tamaño y título que le hemos asignado(como no hemos introducido el código para que el programa salga automáticamente, tendremos que realizarlo con la combinación de teclas Ctrl+C en nuestro terminal). Para los rubystas novatos diremos que para ejecutar un programa desde CMD o terminal tienes que realizarlo con el comando ruby <nombre_del_programa.rb>.
Bueno ya tenemos completado lo más díficil que es comenzar con una herramienta nueva y que salga a la primera, espero que no tengáis muchos problemas para conseguir crear vuestra primera ventana.
Mi primer botón con GTK
Ahora que sería lo siguiente…. añadir elementos a una ventana tan vacía, y ese será nuestro primer botón.
boton = Gtk::Button.new "Mi primer boton" ventana.add(boton) boton.show
Creamos nuestro primer objeto del tipo botón y le pasamos como argumento el nombre de este en la primera lína del código, luego tenemos que añadirlo a la ventana que hemos generado en el anterior código, y como en el caso de la ventana tenemos que mostrarlo con el método show.
Como vemos en la imagen queda un botón un poco grande, además de cometer errores ortográficos, este segundo lo podemos corregir introduciendo en la primera línea el siguiente código.
#encoding: utf-8
Pero el segundo problema es más complejo de solucionar y hace falta conocer el sistema de paneles o grid de la librería visual y no son pocos, por ello os dejamos para aquellos que quieran continuar su aprendizaje de la librería el enlace para que puedan hacerlo http://zetcode.com/gui/rubygtk/.
Aunque hemos centrado la explicación en líneas simple una tras otras, es mejor enfocarlas con las propiedades de los lenguajes orientados a objetos, que sería utilizando clases, herencia y todo nuestro conocimiento en realizar planteamientos correctos. Paso a detallar un ejemplo simple de como estructurar nuestra aplicación con gtk en Ruby orientado a objetos.
require 'gtk2' class RubyApp < Gtk::Window def initialize super #Llama al método inicializador de la clase padre inicializar_ventana #Método donde tenemos todo el código de nuestra aplicación end def inicializar_ventana set_title "Mi primera ventana" #Nombre de la ventana set_default_size 500, 500 #Tamaño de la ventana set_window_position Gtk::Window::Position::CENTER #Posición de la ventana boton = Gtk::Button.new "Mi primer botón" #Crear botón add(boton) #Añadir botón a la ventana show_all #Mostrar todos los elementos generados end end Gtk.init window = RubyApp.new Gtk.main
Eventos del botón
Además y por último vamos introducir un ejemplo sencillo para la llamada de eventos, como por ejemplo cuando un usuario realice la pulsación del botón «Mi primera ventana».
boton.signal_connect "clicked" do Gtk.main_quit end
Con el método «signal_connect» y el evento «clicked» entra en nuestro código cuando un usuario realiza la pulsación en el botón y pasa a ejecutar las líneas correspondientes dentro del bloque Ruby.
Como hemos comentado al comienzo de este post, no es la única librería que existe para aplicaciones de entorno gráfico en el lenguaje de programación de Ruby, pero considero que esta es una librería sólida, con buena documentación para aquellos que quieran aventurarse a realizar sus aplicaciones GUI con Ruby.
Ruby no es solo un completo ideal de los framework como Rails o Sinatra, es más que ello, solo tenéis que conocerlo.