6 nov. 2018

Programa - GTK2

GTK2, algunos ejemplos

 Para programar ventanas GTK con Ruby primero se ha de tener instalado el complemento GTK2 siguiendo las instrucciones de su página: http://sourceforge.net/project/showfiles.php?group_id=53614

Intentaré dar explicación a algunos ejemplos, no a todos, de la página de GTK: http://ruby-gnome2.sourceforge.jp

Posteriormente comprender un poco este entorno que vamos a manejar.

  1. Primero, todo programa debe tener en la primera línea (o de las primeras) un require 'gtk2', que será quien llame a este complemento y debe terminar con GTK.main o GTK.main_quit dependiendo de si queremos que la ventana de terminal desaparezca al finalizar de usar las ventanas o continúe.
  2. Hay que definir la ventana(as) y botón o botones, cada elemento con el texto y decoraciones que se mostrarán, y la posición y tamaños de todo.
  • Definimos la ventana
window = Gtk::Window.new("Table")
window.signal_connect("delete_event") do
    Gtk.main_quit
    false
end
window.border_width = 20

  • Definimos los botones
# Creates a 2x2 table.
table = Gtk::Table.new(2, 2, true)
window.add(table)

[1, 2].each do |i|
    button = Gtk::Button.new("button #{i}")
    button.signal_connect("clicked") do
        puts "Hello again - button #{i} was pressed"
    end
    # Insert button 1 into the upper left quadrant of the table,
    # and button 2 into the upper right quadrant of the table.
    table.attach_defaults(button, i - 1, i, 0, 1)
end

button = Gtk::Button.new("Quit")
button.signal_connect("clicked") do
    Gtk::main_quit
end

# Insert the quit button into the both lower quadrants of the table.
table.attach_defaults(button, 0, 2, 1, 2)
3.- Terminamos el programa con estas dos ordenes:
window.show_all
Gtk.main

Bien empecemos con ejemplos fáciles:
1.- Ejemplo de una ventana:
require 'gtk2'

# Creamos la ventana
window = Gtk::Window.new

# Especificamos el título de la misma
window.title = "Soy la ventana"

# Mostramos la ventana y todo lo que esté definido en ella
window.show_all
Gtk.main
2.- Ejemplo de poner algo de texto en la ventana:
require 'gtk2'

# Creamos la ventana
window = Gtk::Window.new

# Especificamos el título de la misma
window.title = "Soy la ventana"

#Definimos una tabla y una etiqueta
table = Gtk::Table.new(1,1,true)
label1 = Gtk::Label.new("Hola estoy dentro de la ventana, lo ocupo todo y cuanto más escriba más larga se hace la misma ....")

table.attach(label1,0,2,0,1)

# Mostramos la tabla
window.add(table)
# Mostramos la ventana y todo lo que esté definido en ella
window.show_all
Gtk.main

3.- Ejemplo de texto y cuadro para introducir texto:
require 'gtk2'

window = Gtk::Window.new
window.border_width = 10
window.set_size_request(220, -1)
window.title = "Tabla"

window.signal_connect('delete_event') { false }
window.signal_connect('destroy') { Gtk.main_quit }

# filas, columnas, homogeneous
table = Gtk::Table.new(2, 2, true)

label1 = Gtk::Label.new("Introduce la siguiente información:")
label2 = Gtk::Label.new("Nombre: ")
name = Gtk::Entry.new

options = Gtk::EXPAND|Gtk::FILL
# child, x1, x2, y1, y2, x-opt, y-opt, xpad, ypad
table.attach(label1, 0, 2, 0, 1, options, options, 0, 0)
table.attach(label2, 0, 1, 1, 2, options, options, 0, 0)
table.attach(name, 1, 2, 1, 2, options, options, 0, 0)

window.add(table)
window.show_all
Gtk.main



4.- Ejemplo de botones con texto:
require 'gtk2'

window = Gtk::Window.new
window.border_width = 10
window.title = "Botones"
window.signal_connect('delete_event') { false }
window.signal_connect('destroy') { Gtk.main_quit }

fixed = Gtk::Fixed.new

button1 = Gtk::Button.new("Pixel a pixel ...")
button2 = Gtk::Button.new("Púlsame lo que quieras")

button1.signal_connect('destroy') { Gtk.main_quit }
button2.signal_connect('destroy') { Gtk.main_quit }

# Estas son las coordenadas de los botones
fixed.put(button1, 0, 0)
fixed.put(button2, 20, 30)

window.add(fixed)
window.show_all
Gtk.main

5.- Ejemplo de cuadro de introducción de texto
require 'gtk2'

window = Gtk::Window.new
window.border_width = 10
window.title = "Fixed"

window.signal_connect('delete_event') { false }
window.signal_connect('destroy') { Gtk.main_quit }

fixed = Gtk::Fixed.new
field1 = Gtk::Entry.new
field2 = Gtk::Entry.new
field3 = Gtk::Entry.new

fixed.put(field1, 0, 0)
fixed.put(field2, 0, 30)
fixed.put(field3, 0,60)

window.add(fixed)
window.show_all
Gtk.main
Con TAB se pasa de cuadro a cuadro.

5,1.- Igual que el anterior pero con diferentes tamaños de letra
require 'gtk2'

window = Gtk::Window.new
window.border_width = 10
window.title = "Fixed"

window.signal_connect('delete_event') { false }
window.signal_connect('destroy') { Gtk.main_quit }

fixed = Gtk::Fixed.new
field1 = Gtk::Entry.new
field2 = Gtk::Entry.new

font_desc = Pango::FontDescription.new("Sans 30")
field1.modify_font(font_desc)

fixed.put(field1, 0, 0)
fixed.put(field2, 20, 60)

window.add(fixed)
window.show_all
Gtk.main