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