Las Notebooks son unos widgets fantasticos, todos los programadores de guis alguna vez las tuvieron que usar, afortunadamente tambien estan disponibles en Ruby GTK.
El uso es simple y tienen una api muy desarrollada con muchos métodos interesantes, el siguiente programa muestra algunos de ellos.

require 'gtk2' class Mi_app < Gtk::VBox def initialize() super() # Creo las solapas nb = Gtk::Notebook.new() nb.append_page(v1=Gtk::VBox.new(false,0), Gtk::Label.new("Hoja 1")) nb.append_page(v2=Gtk::VBox.new(false,0), Gtk::Label.new("Hoja 2")) nb.append_page(v3=Gtk::VBox.new(false,0), Gtk::Label.new("Hoja 3")) # Creo la barra de botones hcaja = Gtk::HBox.new() bt1 = Gtk::Button.new("Agregar") bt1.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) { nb.append_page(Gtk::VBox.new(false,0), Gtk::Label.new("Hoja "+ (nb.n_pages + 1).to_s)) nb.show_all } bt2 = Gtk::Button.new("Eliminar") bt2.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) { num = nb.n_pages print "Paginas: #{num}\n" if num > 0 nb.remove_page((num-1)) end } bt3 = Gtk::Button.new("Cambiar Pos") bt3.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) { num = nb.n_pages npos = (nb.tab_pos.to_i + 1) % 4 if num > 0 # tambien se puede especificar la posicion con constantes. #print Gtk::POS_BOTTOM.to_i, "\n" #print Gtk::POS_TOP.to_i, "\n" #print Gtk::POS_RIGHT.to_i, "\n" #print Gtk::POS_LEFT.to_i, "\n" nb.set_tab_pos(npos) print "La nueva posición es: #{npos}\n" end } bt4 = Gtk::Button.new("Rotar") bt4.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) { #mueve la ultima pagina al principio num = nb.n_pages if num > 1 child = nb.get_nth_page(num - 1) nb.reorder_child(child, 0) texto = nb.get_tab_label_text(child) print "se movió la '#{texto}' al primer lugar.\n" nb.set_tab_label_text(child, texto + ">") end } hcaja.pack_start(bt1) hcaja.pack_start(bt2) hcaja.pack_start(bt3) hcaja.pack_start(bt4) pack_start( hcaja, false, false, 0) pack_start( nb, true, true, 0) end end class Viewer < Gtk::Window def initialize() super() set_title("App Base") set_window_position(Gtk::Window::POS_CENTER) signal_connect("delete_event") { |i,a| Gtk::main_quit } set_default_size(250, 250) add(Mi_app.new) end end Gtk.init() view = Viewer.new view.show_all Gtk.main()
Es claro que tambien se pueden agregar widgets dinamicamente en las paginas, la siguiente porción de código muestra como agregar unas tarjetas de visita (Label) en la segunda página desde un botón.
bt5 = Gtk::Button.new("Agr. Etiqueta")
bt5.signal_connect( "button_press_event", Gdk::Event::BUTTON_PRESS ) {
if nb.n_pages > 0
child = nb.get_nth_page(0)
l = Gtk::Label.new("Ruby GTK")
child.pack_start(l,true)
l.show
end
}
pacquiao vs marquez Philippine Travel Travel Asia home ideas Fifa World Cup pacquiao vs marquez tickets donaire vs narvaez cotto vs margarito donaire vs narvaez tickets cotto vs margarito live streaming essay writing guide cotto vs margarito tickets st-pierre vs diaz st-pierre vs diaz tickets pacquiao vs marquez velasquez vs dos santos velasquez vs dos santos tickets