Applicazione
- Struttura  (Structure)

 una applicazione GUI (Graphics User Interface) prevede normalmente
     la seguente struttura:

- importazione delle librerie necessarie
- creazione della finestra principale
- creazione di un packing dove inserire i vari widgets
- connessione dei widgets ai relativi signal handlers
- inserimento del packing nella finestra principale
- visualizzazione dei widget necessari
- avvio della procedura principale

- Inizializzazione (Setup)

#!/usr/bin/env python
- nella prima linea inseriamo il codice che rende esecutivo lo script

import pygtk
import gtk
- inseriamo le librerie per le gtk

pygtk.require('2.0')
- se vogliamo assicurarci che venga usata una versione uguale o maggiore

- Finestra principale (Main)

self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- istanziamo la finestra principale
    questa non contiene nessun widget e inizialmente e' invisibile!

self.window.destroy()
- questo piu' tardi ci servira' per chiudere la finestra

gtk.main_quit()
- oppure questo se si vuole chiudere tutta l'applicazione

Posizionare gli oggetti
- Horizontal Box
hBox=gtk.HBox(homogeneous=False,spacing=0)
- istanziamo un contenitore che suddivide gli oggetti in modo
    orizzontale
 - spacing
    e' il numero di pixel che distanzia i vari widgets tra loro
 - homogeneous
    se vero tutti i widgets avranno la stessa dimensione

hBox.pack_start(button,expand=False,fill=False,padding=20)
- aggiungiamo a partire dall'inizio un oggetto chiamato 'button'
 - expand
    permette al widget di potersi ridimensionare
 - fill
    permette al widget di poter occupare tutto lo spazio disponibile
 - padding
    e' il numero di pixel che separa un widgets da un'altro

- Vertical Box
vBox=gtk.VBox(homogeneous=False,spacing=0)
- allo stesso modo si puo' gestire il vertical Box

- Table Box
table=gtk.Table(rows=2,columns=2,homogeneous=False)
- il table packaging e' l'unione del vertical con l'horizzontal Box
    l'attributo fill ed expand sono automaticamente attivi!!!
 - rows
    e' il numero di righe desiderato
 - columns
    e' il numero di colonne desiderato

table.attach(button,0,1,0,1)
- aggiungiamo un widget 'button' in alto a sinistra della tabella

Bottoni
- Normal      (tipo pulsante)
- Radio        (una selezione esclude l'altra)
- Checklist   (ogni selezione e' indipendente)
- Toggle       (tipo On/Off)

- Normal
button=gtk.Button("This is the label")
- questo implementa un bottone normale

- Radio
button=gtk.RadioButton(None,"Label")
- questo istanzia il primo radio button
button=gtk.RadioButton(button,"Label")
- questo e' il radio button sucessivo !

- Checklist
button=gtk.CheckButton("label")
- questo e' un'istanza di un check button

- Toggle
button=gtk.ToggleButton("label")
- questo e' un'istanza di un toggle button

Applicazione di esempio: (Button Normal)
# importiamo le librerie necessarie
import gtk

# definiamo una classe
class SimpleApp(object):
# funzione di inizializzazione
def __init__(self):
# contatore
self.cou = 0
# istanziamo un bottone normale
self.but = gtk.Button(str(self.cou))
# associamo al segnale 'clicked' la nostra callback
self.but.connect('clicked', self.click)
# istanziamo una finestra
self.win = gtk.Window()
# associamo al segnale 'destroy' la callback di uscita del programma
self.win.connect("destroy", lambda wid: gtk.main_quit())
# aggiungiamo il nostro bottone
self.win.add(self.but)
# rendiamo il tutto visibile
self.win.show_all()

# funzione di callback
# il secondo argomento 'wid' e' il riferimento del widget di appartenenza
# il terzo argomento 'dat' serve a passare eventuali parametri
def click(self, wid, dat=None):
# incrementiamo di 1 il contatore
self.cou += 1
# aggiorniamo la nostra etichetta
wid.set_label(str(self.cou))

# se il modulo non e' stato importato
# allora eseguiamo la nostra applicazione di test
if __name__ == '__main__':
# istanziamo il nostro oggetto
app = SimpleApp()
# passiamo il controllo alle gtk
# (avviamo il programma!)
gtk.main()
Visualizzazioni e informazioni per l'utente
- Labels            (stringe di visualizzazione)
- Tool Tips        (suggerimenti)

- Labels
    sono delle semplici stringe visualizzabili
    (non hanno la gestione di segnali!)

- Tool Tips
    sono le informazioni che appaiono, dopo un tempo prestabilito,
     quando si rimane fermi sopra un oggetto (es: un'icona di un toolbar)

 Ingresso dati
- Text entry
    permette all'utente di inserire dei dati

entry=gtk.Entry(max=N)
- limita l'inserimento dei dati al massimo di N caratteri

entry.set_max_length(max)
- modifico l'attributo che stabilisce il numero massimo caratteri

entry.set_text(text)
- imposto del testo preventivamente

entry.set_editable(False)
- rendo il testo non editabile

text=entry.get_text()
- prelevo il testo inserito


e-mail _orciml_@gmail.com eliminare gli underscore per ottenere l'indirizzo corretto!!!