[ruby-gnome2-doc-cvs] [Hiki] create - tut-gtk-empaquetado-demo

Back to archive index

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







ruby-gnome2-cvs メーリングリストの案内
Back to archive index