- 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