ruby-****@sourc*****
ruby-****@sourc*****
2005年 3月 18日 (金) 02:36:11 JST
------------------------- REMOTE_ADDR = 213.37.10.235 REMOTE_HOST = REMOTE_USER = ruby-gnome2-hiki URL = http://ruby-gnome2.sourceforge.jp/cgi-bin/hiki/es/hiki.cgi?tut-gtk-empaquetado-demo ------------------------- TITLE = tut-gtk-empaquetado-demo KEYWORD = = Programa de Demostraci$B(B de Empaquetado {{link "tut-gtk-empaquetado-cajas-detalles", "tut-gtk-empaquetado-intro", "tut-gtk", "tut-gtk-empaquetado-tablas"}} #!/usr/bin/env ruby require 'gtk2' # Crea una nueva caja horizontal rellena con botones. Los argumentos de Gtk::HBox.new # y Gtk::Box#pack_start se pasan como argumentos a este m$BqU(Bodo. def make_box(homogeneous, spacing, expand, fill, padding) box = Gtk::HBox.new(homogeneous, spacing) "Gtk::Box#pack_start (button, #{expand}, #{fill}, #{padding})".split(/ /).each do |s| button = Gtk::Button.new(s) box.pack_start(button, expand, fill, padding) end box end # Procesa los argumentos de la linea de comandos. which = ARGV.shift unless which $stderr.puts "uso: #{$0} num" $stderr.puts " donde num es 1, 2, or 3." exit 1 end # No hay que olvidar inicializar Ruby/GTK2! Gtk.init # Crea la ventana principal. window = Gtk::Window.new # Hay que recordar conectar siempre la se$B(Bl delete_event a la ventana principal # Esto es muy importante para que el comportamiento sea intuitivo. window.signal_connect("delete_event") do Gtk::main_quit false end window.border_width = 10 # Creamos una caja vertical (vbox) para empaquetar dentro las cajas horizontales # (creadas por make_box). # Esto nos permite apilar las cajas horizontales que contienen los botones # una encima de otra en esta caja vertical. box1 = Gtk::VBox.new(false, 0) case which.to_i when 1 # Crea y alinea una nueva etiqueta a la izquierda. # Veremos $BqT(Bta y otras funciones en la secci$B(B Atributos de los Widgets label = Gtk::Label.new("Gtk::HBox.new(false, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) # Las primeras 2 entadas son para los par$BaN(Betros homgeneous y spacing de Gtk::HBox.new. # Las tres ultimas entradas son para los argumentos expand, fill y padding de Gtk::HBox#pack_start. [ [false, 0, false, false, 0], [false, 0, true, false, 0], [false, 0, true, true, 0], ].each do |args| # Crea una caja horizontal con los par$BaN(Betros especificados # y la empaqueta por arriba en la caja vertical. box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end # Inserta un separador en la caja vertical. separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) # Igual que antes. label = Gtk::Label.new("Gtk::HBox.new(true, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [true, 0, true, false, 0], [true, 0, true, true, 0], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) when 2 label = Gtk::Label.new("Gtk::HBox.new(false, 10)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [false, 10, true, false, 0], [false, 10, true, true, 0], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) label = Gtk::Label.new("Gtk::HBox.new(false, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [false, 0, true, false, 10], [false, 0, true, true, 10], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) when 3 # Esto demuestra la habilidad de usar Gtk::Box#pack_end para alinear # a la derecha los widgets. Primero, creamos una nueva caja como antes. box2 = make_box(false, 0, false, false, 0); # Crea una etiqueta que serpuesta al final. label = Gtk::Label.new("end") box2.pack_end(label, false, false, 0) box1.pack_start(box2, false, false, 0) # Un separador para la parte inferior. separator = Gtk::HSeparator.new # Esto asigna expl$ByD(Bitamente el separados a 400 pixels de ancho por 5 de alto. # Lo hacemos porque la caja que hemos creado tambi$BqO(B tiene 400 pixels de ancho, # y la etiqueta "end" va a estar separada de las dem$BaT(B etiquetas en la hbox. # De lo contrario, todos los widgets de la caja se empaquetar$ByB(Bn tan cerca # como fuera posible. separator.set_size_request(400, 5) box1.pack_start(separator, false, true, 5) end # Crea una nueva caja y empaqueta un bot$B(B 'quit' en ella. # Este bot$B(B servirpora cerrar el programa, al igual que el bot$B(B de cerrar ventana. quitbox = Gtk::HBox.new(false, 0) button = Gtk::Button.new("Quit") button.signal_connect("clicked") do Gtk.main_quit end quitbox.pack_start(button, true, false, 0) box1.pack_start(quitbox, true, false, 0) window.add(box1) # Muestra todos los widgets. window.show_all # Como siempre, terminamos entrando en el bucle principal con Gtk.main. Gtk.main