Ruby Tk – Una prima finestra

r6
Cosa fare dopo l’Hello World! del post precedente?
D’oh! (cit.): è ora di iniziare con una finestra vera, ci mettiamo dentro i frame e un paio di pulsanti per vedere qualche interazione. Ecco un primo esempio (f1.rb):

#!/usr/bin/ruby
# encoding: UTF-8

#f1.rb

require "tk"

f1 = TkFrame.new {
    relief 'sunken'
    borderwidth 3
    background "red"
    padx 15
    pady 20
    pack('side' => 'left')
}

f2 = TkFrame.new {
    relief 'groove'
    borderwidth 1
    background "yellow"
    padx 10
    pady 10
    pack('side' => 'right')
}

TkButton.new(f1) {
    text 'Button1'
    command {puts "push button1"}
    pack('fill' => 'x')
}

TkButton.new(f1) {
    text 'Button2'
    command {puts "push button2"}
    pack('fill' => 'x')
}

TkButton.new(f2) {
    text 'Quit'
    command 'exit'
    pack('fill' => 'x')
}

Tk.mainloop

f1

Esaminiamo brevemente il codice. Definiamo due frame (righe 8 e 17) di cui settiamo alcune proprietà (ce ne potrebbero essere anche altre, come vedremo in seguito).

In seguito definiamo 3 pulsanti (righe 25, 32 e 38) i primi due appartenenti al frame f1 e il terzo a f2. Per ogni pulsante definiamo il testo e il comando che viene eseguito quando questo viene premuto. Notare che i comandi possono essere istruzioni sia di Ruby (come puts) che di Tk come exit.
Ma, abbiamo visto nei post precedenti che tutto dove può esserci un’istruzione può esserci una funzione; ciò dovrebbe senz’altro essere possibile anche qui.
Proviamo (f2.rb):

#!/usr/bin/ruby
# encoding: UTF-8

#f2.rb

require "tk"

f1 = TkFrame.new {
    relief 'sunken'
    borderwidth 5
    background "red"
    padx 15
    pady 20
    pack('side' => 'left')
}

f2 = TkFrame.new {
    relief 'groove'
    borderwidth 10
    background "yellow"
    padx 2
    pady 2
    pack('side' => 'bottom')
}

TkButton.new(f1) {
    text 'Button1'
    command {puts "push button1"}
    pack('fill' => 'x')
}

TkButton.new(f1) {
    text 'Button2'
    command {messaggio 2}
    pack('fill' => 'x')
}

TkButton.new(f2) {
    text 'Quit'
    command {esci}
    pack('fill' => 'x')
}

def esci
    puts "bye!"
    Tk.exit
end

def messaggio n
    puts "pulsante #{n}"
end
Tk.mainloop

f2

Abbiamo aumentato i bordi dei frame per evidenziare la proprietà relief ma questo è una cosuccia. Più importante i command per Button2 (riga 34) e Quit (riga 40) che eseguono funzioni definite da noi.

Le funzioni seguono nello stesso file. Notare che in esci abbiamo dovuto qualificare exit come appartenente a Tk e che la funzione messaggio riceve un parametro, cosa già vista in passato.

Quindi, conclusione per questo post: mi sembra che Tk sia molto semplice e razionale, finora non abbiamo visto niente di realmente nuovo. E se continua così possiamo dire che ormai sappiamo tutto, o quasi.

Ah! una cosa: ho seguito, quasi fedelmente la guida Ruby/TK Guide.

Annunci
Post a comment or leave a trackback: Trackback URL.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: