RubyLit - Ruby.del.litoral!
Progress Bar Continuo

Las barras de progreso continuas se utilizan cuando no es posible establecer el tiempo que dura un proceso, este ejemplo ilustra como usarlas cavite homes.


require 'gtk2'

# inicio gtk
Gtk.init

# creo la ventana
window = Gtk::Window.new( Gtk::Window::TOPLEVEL )
window.set_size_request( 300, 80 )
window.set_title( "Progressbar Continuo" )
window.signal_connect( "delete_event" ) { Gtk.main_quit }

# defino una caja vertical para empaquetar todos los widgets
vbox = Gtk::VBox.new( false, 0 )

# agrego la caja a la ventana
window.add( vbox )

# creo la barra de progreso
@pb2 = Gtk::ProgressBar.new()

# seteo el incremento (10% cada vez)
@pb2.pulse_step=0.1

# pongo la barra en la caja vertical
vbox.pack_start( @pb2, false, false, 8)

# defino tres botones
bt1 = Gtk::Button.new( Gtk::Stock::EXECUTE )
bt2 = Gtk::Button.new( Gtk::Stock::STOP )
bt3 = Gtk::Button.new( Gtk::Stock::QUIT )

# Metodo para mover la barra
def mover_barra
    @pb2.pulse
end

# evento click del boton ejecutar
bt1.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS  ) { 
    # defino un timeout cada 1 segundo
    @tid= Gtk::timeout_add(1000) { 
        mover_barra()
        true 
    }
}

# evento click del boton stop
bt2.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS  ) { 
    # elimino el timeout
    Gtk::timeout_remove(@tid) if @tid
    @tid = nil
}

# evento click del boton salir
bt3.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS  ) { 
    # elimino el timeout
    Gtk::timeout_remove(@tid) if @tid
    @tid = nil

    # salgo del programa
    Gtk.main_quit
}

# creo una tabla para empaquetar los botones
tabla = Gtk::Table.new( 3, 1, true )

# agrego los botones a la tabla
tabla.attach(bt1, 0, 1, 0, 1)
tabla.attach(bt2, 1, 2, 0, 1)
tabla.attach(bt3, 2, 3, 0, 1)

# creo un separador y lo agrego a la caja vertical
vbox.pack_start( Gtk::HSeparator.new(), false, false, 5)

# agrego la tabla a la caja vertical
vbox.pack_start( tabla, false, false, 0)

#muestro todos los widgets
window.show_all

#run!
Gtk.main