6 nov. 2018

Programa - Ejemplos de ventanas con tablas- 1

# 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-8
require 'gtk2'

w = Gtk::Window.new("Table")
w.signal_connect("delete_event") do
    Gtk.main_quit
    false
end
w.border_width = 5 
.
.
.
.
.
w.show_all
Gtk.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 tabla
w.add(t)                                              # Añadimos la tabla a la ventana

[1,10].each do |i|                                 # En este bloque creamos una rutina
    b1 = Gtk::Button.new("botón #{i}")   #Crea tantos botones como apunte .each
    b1.signal_connect("clicked") do        #Asigna una acción a la señal de sistema cliked 
        puts "Hola de nuevo - botón #{i} fue presionado"
    end
        
    t.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).
end

b2 = 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_quit
end

t.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") do
        puts "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)
end

b = Gtk::Button.new("Salir")
b.signal_connect("clicked") do
    Gtk::main_quit
end

# Inserta el botón salir como un gran botón inferior.
t.attach_defaults(b, 0, 10, 4, 10)
Se obtiene:
75%