Programando las acciones
Estamos ya muy cerca de concluir con este ejemplo. Tan sólo nos falta programar las acciones de cada uno de los cuatro botones. Aunque se trata de algo muy sencillo, no está de más echarle un vistazo a los fundamentos a la teoría de señales de GTK2.
En este caso, y aunque podríamos editar el fichero .glade, utilizaremos Glade de nuevo. Así, abrimos nuestro proyecto y seleccionamos, por ejemplo, el botón botonSalir. Editamos sus propiedades y añadimos un manejador -al que llamaremos quit para la señal clicked. Este manejador se encargará de terminar la aplicación cuando se pulse el botón.
Ya le hemos "dicho" a la interfaz que cuando se pulse este botón, invoque al método quit. Así que ahora tenemos que implementarlo. Como es de suponer, editamos nuevamente el código Ruby y creamos un nuevo método -llamado quit-- para la clase CalculadoraSimplona:
def quit
Gtk.main_quit # Termina el bucle principal de GTK.
end
Ahora volvemos a ejecutar la aplicación... ¡y ya podemos salir de ella usando el botón salir!
Bueno, ya "sólo" resta programas acciones para los otros cuatro botones. Como es de suponer, se sigue el mismo procedimiento que en el caso anterior pero, obviamente, el código Ruby será diferente. Así editamos las propiedades del botón de sumar, y a la señal clicked le asociamos un manejador suma. A continuación escribimos un método suma:
def suma
# Se asigna a los operandos los valores de los cuadros de texto.
@laCalculadora.a= @cuadroA.text.to_i
@laCalculadora.b= @cuadroB.text.to_i
# Se suman los números y se muestra el resultado
@cuadroResultado.set_text(@laCalculadora.sumar)
end
Guardamos todos los cambios, volvemos a ejecutar y ya debería funcionar la suma. Metemos dos numeros en los dos primeros recuadros, pulsamos el botón de suma y ¡voilà!
Si se ha seguido la explicación hasta aquí, implementar el resto de las operaciones no debería presentar ningún tipo de problema. Así que se lo dejo como "ejercicio" ;-)
Y, en principio, eso es todo. Espero que lo hayan disfrutado y les sea de utilidad. Como colofón, les pongo el código Ruby desarrollado en estos dos artículos, para que tengan una visión más global.
Gracias por aguantarme ;-)
calculadora.rb
require 'libglade2'
class CalculadoraSimplona
TITLE = "Calculadora Simplona"
NAME = "CalculadoraSimplona"
VERSION = "1.0"
def initialize(path)
@glade = GladeXML.new(path) {|handler| method(handler)}
@cuadroA = @glade.get_widget("cuadroA")
@cuadroB = @glade.get_widget("cuadroB")
@cuadroResultado = @glade.get_widget("cuadroResultado")
@laCalculadora = Calculadora.new
end
def quit
Gtk.main_quit
end
def suma
@laCalculadora.a= @cuadroA.text.to_i
@laCalculadora.b= @cuadroB.text.to_i
@cuadroResultado.set_text(@laCalculadora.sumar)
end
end
class Calculadora
attr_writer :a, :b
def sumar
@a + @b
end
def restar
@a - @b
end
def multiplicar
@a * @b
end
def dividir
@a / @b
end
end
Gtk.init
CalculadoraSimplona.new("calculadora.glade")
Gtk.main