4/11/2008


Programación Gráfica GTK2/Ruby en Gnu/Linux (I)

Bueno mi necesidad de aprender a programar en algún lenguaje para Gnu/Linux en modo gráfico viene desde hace tiempo, hay muchas maneras de crear GUIs (Interfaz Gráfica para el usuario), la mayoría de los lenguajes como C, Python, Perl, Php tienen librerías para crear aplicaciones Gtk2, las usadas por Gnome. Pero como me gané un librito de Ruby hace unos meses y lo tenía tirado por ahí decidí echarle una mirada y me gustó =D. Por eso lo que valla aprendiendo voy a ir subiéndolo a mi blog, así usted lector que no tiene conocimientos de programación gráfica en Gnu/Linux va a aprender junto conmigo, la creación de GUIs usando Ruby. La diferencia de muchos tutoriales donde el maestro se la sabe todas, yo solo voy a aportar mis conocimientos adquiridos al mismo paso que usted. Espero que les guste y les ayude. No me voy a centrar en la progración de Ruby en modo consola, solo explicaré conceptos si fueran necesarios para nuestra aplicación gráfica. Si algún programador con experiencia en gtk2/ruby o ruby quiere aportar, se encuentra bienvenido...

Empecemos, primero, ¿Qué es Ruby?


Ruby es un lenguaje de programación reflexivo y orientado a objetos(lenguaje interpretado), creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python, Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.(es.Wikipedia)

Su sitio oficial no está nada mal, además también está en spanish...creo que eso me enamoró =P. Me voy a centrar mucho en la práctica por lo que si quieren saber sobre la historia de Gtk2 o de Ruby busquen en la web XD. NO voy a enseñar a fondo ruby, solo vamos a obtener conocimientos para desarrollar GUI, que algún experto no me reclame después..=P.

Instalación:

Arch Linux:

# pacman -S ruby ruby-gnome2

Debian o Ubuntu:

# apt-get install ruby ruby-gnome2

Ya estoy ansioso por empezar, asi que empecemos, a me olvidada, vamos a utilizar un editor de texto, a mi me gusta Vim pero pueden usar Emacs, Gedit o Mousepad o lo que le guste, guarden su programa como "holamundo.rb".

Creando el famoso "Hola mundo":

#!/usr/bin/env ruby
=begin
holamundo.rb
Nuestro Primer Programa =)
=end

require 'gtk2'

boton = Gtk::Button.new("Hola Mundo")
boton.signal_connect("clicked"){
puts "Me hicieron click"
}

ventana = Gtk::Window.new
ventana.signal_connect("delete_event"){
puts "Ventana cerrada"
#true
false
}

ventana.signal_connect("destroy"){
puts "Ventana destruida"
Gtk.main_quit
}

ventana.border_width = 10
ventana.add(boton)
ventana.show_all

Gtk.main


Explicación:

La primera línea de un programa en la mayoría de los sistemas *nix, le indica al sistema que lenguaje va a ser utilizado.

#!/usr/bin/env ruby

La siguiente estructura es un comentario ya que se encuentra entre =begin y =end. Otra manera de comentar es agregando # al principio de una línea.

=begin
holamundo.rb
Nuestro Primer Programa =)
=end

La siguiente línea vincula a la librería Ruby/GTK2 con nuestro programa:

require 'gtk2'

A continuación vemos lo siguiente:

boton = Gtk::Button.new("Hola Mundo")

Nos indica que creamos un objeto llamado "boton" que posee las características de un "Gtk::Button.new" y mostrará en su título "Hola Mundo".

button.signal_connect("clicked") {
puts "Me hicieron click"
}

Cuando hagamos click sobre nuestro botón ("boton.signal_connect("clicked")") mostrará en la terminal "Me hicieron click".

Ahora vamos a crear un objeto que sea del tipo "Gtk::Window.new", es decir una nueva ventana GTK, llamada "ventana":

ventana = Gtk::Window.new

Los parámetros normales o defaults son los siguientes:
  • Tamaño: 200x200
  • Estilo: Gtk::Window::TOPLEVEL
  • Título: el mismo que el nombre del programa "holamundo.rb"
Sigamos:

ventana.signal_connect("delete_event"){
puts "Ventana cerrada"
#true
false
}

Cuando la ventana sea cerrada, nos mostrará en la consola "Ventana cerrada", luego la línea que dice "false" quiere decir que la ventana desaparezca, prueben comentándola y descomentar #true a ver que sucede. Es decir de la siguiente manera podría probar =P :

ventana.signal_connect("delete_event"){
puts "Ventana cerrada"
true
#false
}

Una vez que la ventana fué cerrada exitosamente nuestro programa destruirá el objeto ventana y saldrá del programa mediante "Gtk.main_quit".

ventana.signal_connect("destroy"){
puts "Ventana destruida"
Gtk.main_quit
}

Por último nos queda las últimas 4 líneas:

ventana.border_width = 10
ventana.add(boton)
ventana.show_all

Gtk.main

La primera nos indica el ancho del borde, la segunda agrega nuestro objeto "boton" creado anteriormente a nuestro objeto ventana y la tercera nos muestra la ventana en pantalla con todos sus objetos.

Por último nos queda "Gtk.main" que será necesario en cada aplicación creada, ya que es otra llamada que verá Ruby/GTK2 en cada aplicación. Cuando el control llega a este punto, GTK se dormirá en espera de eventos X (como un botón o la presión de una tecla), el tiempo, o eventos en el archivo IO
de notificaciones.
En el ejemplo anterior, sin embargo, los eventos son ignorados.

Para ejecutar nuestro programa abrimos una terminal:

$ ruby holamundo.rb

Bueno terminamos nuestro primer programa, creo que así les habrá quedado...


Espero que este sea el primero de muchos artículos sobre ruby, y bueno, si a alguien le resultó util o le gustó o no, o si me equivoqué en algo me gustaría que dejaran sus comentarios. Saludos a todos y hasta la próxima =) !!

Referencia

2 comentarios:

Anonymous said...

Muy bueno el post, sencillo, claro y conciso...

Carlos Contreras said...

si le das permisos de ejecucion al archivo tambien lo podes ejecutar con ./nombre_archivo.rb

Muy buen post! te felicito