# encoding: UTF-8
require 'gtk2'
w = Gtk::Window.new("Table")
w.signal_connect("delete_event") do
Gtk.main_quit
false
end
w.border_width = 5
# Crea una tabla de 4x10:
table = Gtk::Table.new(4, 10, true)
w.add(table)
[1,10].each do |i|
button = Gtk::Button.new("boton #{i}")
button.signal_connect("clicked") do
puts "Hola de nuevo - boton #{i} fue presionado"
end
# Inserta el botón 1 en la esquina superior izquierda de la tabla, y el botón 2
# en la superior derecha.
table.attach_defaults(button, i - 1, i, 0, 1)
end
button = Gtk::Button.new("Salir")
button.signal_connect("clicked") do
Gtk::main_quit
end
# Inserta el botón salir en las dos esquinas inferiores de la tabla.
table.attach_defaults(button, 0, 2, 0, 4)
w.show_all
Gtk.main
Explicación:
Parte 1.- Como siempre hay unas cosas mínimas necesarias como son:
# encoding: UTF-8require 'gtk2'w = Gtk::Window.new("Table")w.signal_connect("delete_event") doGtk.main_quitfalseendw.border_width = 5.....w.show_allGtk.main
Todo ésto es para crear la ventana según la librería gtk2, con un cierto margen interior y que al pulsar sobre el icono X del borde superior que cierre la ventana. A la ventana le llamamos w.
Parte 2.- Definimos el contenido de la ventana
# Crea una tabla de 4x10:t = Gtk::Table.new(4, 10, true) # Creamos la tablaw.add(t) # Añadimos la tabla a la ventana[1,10].each do |i| # En este bloque creamos una rutinab1 = Gtk::Button.new("botón #{i}") #Crea tantos botones como apunte .eachb1.signal_connect("clicked") do #Asigna una acción a la señal de sistema clikedputs "Hola de nuevo - botón #{i} fue presionado"endt.attach_defaults(b, i - 1, i, 0, 1) # Inserta un botón en la primera posición de la tabla (posición 1), y el botón 2 en otra posición (posición 10).endb2 = Gtk::Button.new("Salir") #Creamos otro botón con la etiqueta Salir.b2.signal_connect("clicked") do # Asignamos la acción de terminar al ser presionado.Gtk::main_quitendt.attach_defaults(b, 0, 2, 0, 4) # Inserta el botón salir que ocupa desde la posición 0 a la 2 en hacia la derecha y desde la 0 a la 4 hacia abajo.
A la tabla le llamaremos t y a los botones superiores b1 y, b2 al botón inferior.
Mas o menos sería ésto lo que se vería como ventana y las acciones al presionar los botones 1 y 10.
El botón 1 está en la posición (01,01), el botón 10 en la (0,9,0,1) y el botón salir en la (0,2,0,4). Podemos modificar los parámetros del método .attach_default (. . . . ) para hacernos con ello.
Si modificamos la parte central con este otro ejemplo : (prueba2)
(1..10).each do |i|b = Gtk::Button.new("botón #{i}")b.signal_connect("clicked") doputs "Hola de nuevo - botón #{i} fue presionado"end# Inserta 10 botones consecutivos la parte superior de la tabla.# con su respectiva etiqueta correlativa.t.attach_defaults(b, i - 1, i, 0, 1)endb = Gtk::Button.new("Salir")b.signal_connect("clicked") doGtk::main_quitend# Inserta el botón salir como un gran botón inferior.t.attach_defaults(b, 0, 10, 4, 10)
Se obtiene: