RubyLit - Ruby.del.litoral!
Button (changes)

Showing changes from revision #0 to #1: Added | Removed

Probablemente los botones sean los widget mas usados en las aplicaciones Ruby GTK, y por suerte hay mucha documentación sobre como usarlos.

voy a poner algunos ejemplos y a hacer incapie en una señal que me costó trabajo encontrar debido a que abundan los malos usos.

primero hay que destacar que se disponen de dos formas de llamar al metodo new


Gtk::Button.new(text, use_underline = true)

  • text: es un string y se mostrará en el botón.
  • use_underline: es un parametro que se debe especificar en true si se quiere llamar al boton con el mouse y con la combinación de una tecla + ALT

En el siguiente ejemplo se muestra como activar el botón tocando las teclas ALT + l


Gtk::Button.new("C_lic", true)

La siguiente forma de llamar a new es especificando una imagen stock


Gtk::Button.new(stock_id)

donde stock_id es una de las constantes que se pueden usar, la lista se puede consultar en esta dirección
http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3AStock#Constants

Un ejemplo es:


Gtk::Button.new(Gtk::Stock::ABOUT)

Pero la potencia de los botones está en el codigo que se ejecuta cuando el usuario lo activa.
esto se logra de la siguiente forma:


bt1 = Gtk::Button.new("_Clic", true)
bt1.signal_connect( "clicked" ) do
  print "clic en el boton 1\n" 
end

El siguiente es un ejemplo completo.


require 'gtk2'

class Mi_app < Gtk::VBox
    def initialize()
        super()
        bt1 = Gtk::Button.new("_Clic", true)
        bt2 = Gtk::Button.new("No_rmal", false)
        bt3 = Gtk::Button.new(Gtk::Stock::OK)

        bt1.signal_connect( "clicked" ) do
            print "clic en el boton 1\n" 
        end

        bt2.signal_connect( "clicked" ) do
            print "clic en el boton 2\n" 
        end

        bt3.signal_connect( "clicked" ) do
            print "clic en el boton 3\n" 
        end

        pack_start( bt1, false, false, 3)
        pack_start( bt2, false, false, 3)
        pack_start( bt3, false, false, 3)

    end
end

if $0 == __FILE__
    class Viewer < Gtk::Window
        def initialize()
            super()
            set_title("Botones") 
            set_window_position(Gtk::Window::POS_CENTER)
            signal_connect("delete_event") { |i,a| Gtk::main_quit }
            set_default_size(300, 150)
            add(Mi_app.new)
        end
    end

    Gtk.init()

    view = Viewer.new
    view.show_all

    Gtk.main()
end

Los programadores muy curiosos pueden intentar reemplazar el código

bt1.signal_connect( "clicked" ) do

por
bt1.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) do

Pese a que la ultima es la forma mas frecuente la misma no ejecuta el código cuando se presiona la combinación ALT + C