Dimensione: 11221
Commento:
|
Dimensione: 12143
Commento: completato il documento
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
= Python GUI = Ci sono un gran numero di toolkit disponibili per creare interfacce grafiche (GUI) con Python, da Tkinter (già compresa nella installazione di Python che consente l'interfaccia con X-Windows) a numerose altre multipiattaforma o specifiche per un certo ambiente. Tra le più utilizzate citiamo '''wxPython''', '''Py``GTK''' e '''Py``Qt''', ma altre possiamo trovarle qui: http://wiki.python.org/moin/GuiProgramming == PyGTK == GTK+ (acronimo che sta per GIMP Tool Kit) è un toolkit (insieme di strumenti) per la creazione di interfacce grafiche. Il toolkit è stato progettato inizialmente come ausilio alla programmazione per il programma ''GIMP'' è diventato una parte fondamentale dell'ambiente ''GNOME''. '''Py``GTK''' è un set di moduli che permettono l'interfaccia tra Python e le librerie GTK, è un toolkit orientato agli oggetti, permette quindi la possibilità di riusare lo stesso codice in più applicazioni, è stato portato ai Python coders da James Henstridge in collaborazione con un team di developers volontari. |
#language it [[BR]] ||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]|| = Introduzione = Esistono gran numero di toolkit (insieme di strumenti) disponibili per creare interfacce grafiche (GUI) con Python, da Tkinter (compresa nell'installazione di Python) a numerose altre multipiattaforma o specifiche per un certo ambiente. Tra le più utilizzate citiamo '''wxPython''', '''Py``GTK''' e '''Py``Qt'''. Per maggiori informazioni, consultare le [#risorse Risorse]. = PyGTK = GTK+ (acronimo che sta per GIMP Tool Kit) è un toolkit per la creazione di interfacce grafiche. Il toolkit è stato progettato inizialmente come ausilio alla programmazione per il programma ''GIMP'' ed è diventato una parte fondamentale dell'ambiente GNOME. '''Py``GTK''' è un set di moduli che permettono l'interfacciamento tra Python e le librerie GTK, è un toolkit orientato agli oggetti, permette quindi la possibilità di riutilizzo dello stesso codice in più applicazioni. È stato portato ai Python coders da James Henstridge in collaborazione con un team di sviluppatori volontari. |
Linea 17: | Linea 21: |
Il sito ufficiale (in inglese) di Py``GTK e': http://www.pygtk.org/ La documentazione in italiano si trova qui: http://www.parafernalia.org/pygtk/ === Esempio di applicazione === Questa è una versione del programma ''Area``Triangolo2.py'' del wiki LinguaggioPython che usa le GUI GTK+: |
Per maggiorni informazioni consultare le [#risorse Risorse]. == Esempio di applicazione == Questa è una versione del programma `AreaTriangolo2.py`, presentato in questa [:LinguaggioPython/Listati#areatraingolo2:pagina], che usa le GTK+: |
Linea 32: | Linea 31: |
Linea 134: | Linea 134: |
[[BR]][[BR]] == Tkinter == Tk è un piccolo toolkit per la creazione di gui scritto originariamente da John Ousterhout come estensione per il linguaggio Tcl. E' stato successivamente portato anche verso altri linguaggi (Python,Ruby,Lisp...). Tkinter è il modulo python che permette l'interfacciamento con Tk.[[BR]] |
|
Linea 138: | Linea 135: |
Il sito degli sviluppatori tcl/tk è http://www.tcl.tk/ === Esempio di applicazione === |
= Tkinter = Tk è un piccolo toolkit per la creazione di GUI scritto originariamente da John Ousterhout come estensione per il linguaggio Tcl. È stato successivamente portato anche verso altri linguaggi (Python, Ruby, Lisp, ...). Tkinter è il modulo Python che permette l'interfacciamento con Tk. Per maggiorni informazioni consultare le [#risorse Risorse]. == Esempio di applicazione == |
Linea 243: | Linea 246: |
[[Anchor(risorse)]] = Risorse = * [http://wiki.python.org/moin/GuiProgramming] [[BR]] Programmare interfacce grafiche con Python. * [http://www.pygtk.org/] {en} [[BR]] Sito ufficiale di Py``GTK. * [http://www.parafernalia.org/pygtk/] {it} [[BR]] Documentazione in italiano di Py``GTK. * [http://www.tcl.tk/] [[BR]] Sito degli sviluppatori tcl/tk è * [http://www.python.it/] {it} [[BR]] Il sito di riferimento per i programmatori python italiani! Qui potete trovare le traduzioni in italiano della documentazione ufficiale nonchè le FAQ sul linguaggio. * [http://www.python.org/] {en} [[BR]] Il sito ufficiale del linguaggio python. Trovate la documentazione in inglese aggiornata all'ultima versione dell'interprete, in più tutte le novità e le iniziative che ruotano intorno a questo linguaggio. |
IndiceBRTableOfContents |
Introduzione
Esistono gran numero di toolkit (insieme di strumenti) disponibili per creare interfacce grafiche (GUI) con Python, da Tkinter (compresa nell'installazione di Python) a numerose altre multipiattaforma o specifiche per un certo ambiente.
Tra le più utilizzate citiamo wxPython, PyGTK e PyQt.
Per maggiori informazioni, consultare le [#risorse Risorse].
PyGTK
GTK+ (acronimo che sta per GIMP Tool Kit) è un toolkit per la creazione di interfacce grafiche. Il toolkit è stato progettato inizialmente come ausilio alla programmazione per il programma GIMP ed è diventato una parte fondamentale dell'ambiente GNOME.
PyGTK è un set di moduli che permettono l'interfacciamento tra Python e le librerie GTK, è un toolkit orientato agli oggetti, permette quindi la possibilità di riutilizzo dello stesso codice in più applicazioni. È stato portato ai Python coders da James Henstridge in collaborazione con un team di sviluppatori volontari.
Nell'installazione standard di Ubuntu è già presente tutto il necessario.
Per maggiorni informazioni consultare le [#risorse Risorse].
Esempio di applicazione
Questa è una versione del programma AreaTriangolo2.py, presentato in questa [:LinguaggioPython/Listati#areatraingolo2:pagina], che usa le GTK+:
1 #!/usr/bin/python
2
3 # Importiamo la funzione sqrt (radice quadrata) dal modulo math
4 from math import sqrt
5
6 # Importiamo le librerie per l'interfaccia grafica GTK
7 import pygtk
8 pygtk.require('2.0')
9 import gtk
10
11 # Definiamo una classe Triangolo con tre metodi:
12 # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo.
13 class Triangolo:
14
15 # Attributi della classe (le misure dei tre lati)
16 a, b, c = 0, 0, 0
17
18 # Metodo costruttore, in python i costruttori hanno il nome speciale __init__
19 def __init__(self,a,b,c):
20 # Controlliamo se i tre valori dati possono effettivamente
21 #essere le misure dei lati di un triangolo.
22 # Caso contrario solleviamo una bella eccezione!
23 if ((a+b>c) and (a+c>b) and (b+c>a)):
24 self.a=a
25 self.b=b
26 self.c=c
27 else:
28 raise "TriangoloImpossibile" , "I lati non possono formare un triangolo"
29 # abbiamo dato un nome ed un essaggio di errore all'eccezione
30 # Metodo che calcola il perimetro
31 def perimetro(self):
32 return self.a + self.b + self.c
33
34 # Metodo che calcola l'area (tramite formula di Erone)
35 def area(self):
36 p=self.perimetro()/2.0
37 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
38
39 #questa e' la classe che definisce l'interfaccia grafica
40 class Dialogo:
41 def __init__(self):
42 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) # definiamo la finestra
43 self.window.set_title("Calcolo area triangolo")# le diamo in titolo
44 self.window.connect("destroy", self.distruggi) # catturiamo l'evento destroy
45 #(es. la X che chiude la finestra)
46 # e lo indirizziamo a una funzione
47 # che termina il programma
48 self.window.set_resizable(False) # la finestra non e' modificabile in dimensioni
49 self.window.set_position(gtk.WIN_POS_MOUSE) # e compare nell'attuale posizione del muose
50 self.bottone = gtk.Button("Calcolo") # definiamo il bottone calcolo
51 self.bottone.connect("clicked", self.calcola) # catturiamo il click e lo indirizzo
52 # alla funzione che esegue il calcolo
53 self.etichetta1 = gtk.Label("Lato 1 ") # testo che richiede la lunghezza del 1 lato
54 self.entrata1 = gtk.Entry(10) # casella per l'inserimento della lunghezza
55 # del 1 lato
56 self.riga1 = gtk.HBox() # creiamo un contenitore dove
57 # gli oggetti sono disposti in orizzontale (una riga)
58 self.riga1.pack_start(self.etichetta1) # inseriamo l'etichetta e la casella di input nella 1 riga
59 self.riga1.pack_start(self.entrata1)
60 self.etichetta2 = gtk.Label("Lato 2 ") # e cosi' via ...
61 self.entrata2 = gtk.Entry(10)
62 self.riga2 = gtk.HBox()
63 self.riga2.pack_start(self.etichetta2)
64 self.riga2.pack_start(self.entrata2)
65 self.etichetta3 = gtk.Label("Lato 3 ")
66 self.entrata3 = gtk.Entry(10)
67 self.riga3 = gtk.HBox()
68 self.riga3.pack_start(self.etichetta3)
69 self.riga3.pack_start(self.entrata3)
70 self.risultato = gtk.Label(" -- ") # creiamo un'etichetta per il risultato
71 self.colonna = gtk.VBox() # creiamo un contenitore dove
72 # gli oggetti sono disposti in verticale (una colonna)
73 self.colonna.pack_start(self.riga1) # e vi inseriamo le righe, il pulsante e l'etichetta del risultato
74 self.colonna.pack_start(self.riga2)
75 self.colonna.pack_start(self.riga3)
76 self.colonna.pack_start(self.bottone)
77 self.colonna.pack_start(self.risultato)
78 self.window.add(self.colonna) # inseriamo il tutto nella finestra
79 self.window.show_all() # comando che visualizza la finestra ed il suo contenuto
80
81 # funzione che raccoglie gli input, crea un'istanza Triangolo e ne richiede il calcolo dell'area
82 def calcola(self, widget,data = None):
83 try:
84 a = float(self.entrata1.get_text()) # legge i dati inseriti nella 1 casella
85 b = float(self.entrata2.get_text())
86 c = float(self.entrata3.get_text())
87 triangolo = Triangolo(a, b, c)
88 self.risultato.set_text(str(triangolo.area()))
89 except ValueError: # catturo l'eccezione
90 self.risultato.set_text("Devi inserire valori numerici.")
91 except "TriangoloImpossibile": # catturo la seconda eccezione
92 self.risultato.set_text("I lati immessi non possono formare un triangolo")
93 # funzione di uscita
94 def distruggi(self, widget,data = None):
95 print data
96 return gtk.main_quit()
97 # funzione di lancio della GUI
98 def main(self):
99 gtk.main()
100
101 # avvio del programma a condizione che non sia caricato come modulo
102 print __name__
103 if __name__ == "__main__":
104 base = Dialogo()
105 base.main()
Listato del programma AreaTriangolo2.py con interfaccia grafica GTK+BR
Tkinter
Tk è un piccolo toolkit per la creazione di GUI scritto originariamente da John Ousterhout come estensione per il linguaggio Tcl. È stato successivamente portato anche verso altri linguaggi (Python, Ruby, Lisp, ...). Tkinter è il modulo Python che permette l'interfacciamento con Tk.
Per maggiorni informazioni consultare le [#risorse Risorse].
Esempio di applicazione
Presentiamo il solito programma dimostrativo che calcola l'area di un triangolo.
1 #!/usr/bin/python
2
3 # Importiamo la funzione sqrt (radice quadrata) dal modulo math
4 from math import sqrt
5 # Importiamo i widgets dal modulo Tkinter
6 from Tkinter import *
7
8 # Definiamo una classe Triangolo con tre metodi:
9 # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo.
10 class Triangolo:
11
12 # Attributi della classe (le misure dei tre lati)
13 a, b, c = 0, 0, 0
14
15 # Metodo costruttore
16 def __init__(self,a,b,c):
17 # Controlliamo se i tre valori dati possono effettivamente essere le misure dei lati di un triangolo.
18 # Caso contrario solleviamo una bella eccezione!
19 if ((a+b>c) and (a+c>b) and (b+c>a)):
20 self.a=a
21 self.b=b
22 self.c=c
23 else:
24 # abbiamo dato un nome ed un essaggio di errore all'eccezione
25 raise "TriangoloImpossibile" , "I lati non possono formare un triangolo"
26
27 # Metodo che calcola il perimetro
28 def perimetro(self):
29 return self.a + self.b + self.c
30
31 # Metodo che calcola l'area (tramite formula di Erone)
32 def area(self):
33 p=self.perimetro()/2.0
34 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
35
36
37 # questa e' la classe che definisce l'interfaccia grafica
38 class Dialogo(Frame):
39
40 def __init__(self):
41 Frame.__init__(self)
42 self.master.title("Area triangolo.") # Diamo il titolo alla finestra.
43 self.master.minsize(250,150) # Dimensioni minime della finestra
44 self.grid(sticky=E+W+N+S)
45
46 self.ris=StringVar() # Questa variabile stringa viene usata per
47 self.ris.set("---") # aggiornare la gui quando il risultato cambia.
48
49 # Rendiamo ridimensionabile la finestra dell'applicazione
50 top=self.winfo_toplevel()
51 top.rowconfigure(0, weight=1)
52 top.columnconfigure(0, weight=1)
53
54 for i in range(5): self.rowconfigure(i, weight=1)
55 self.columnconfigure(1, weight=1)
56
57
58 self.etichetta1=Label(self, text="Lato 1 ") # Etichetta del lato 1
59 self.etichetta1.grid(row=0, column=0, padx=2)
60
61 self.entrata1=Entry(self) # Casella d'inserimento del lato 1
62 self.entrata1.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S)
63
64 self.etichetta2=Label(self, text="Lato 2 ") # Etichetta del lato 2
65 self.etichetta2.grid(row=1, column=0, padx=2)
66
67 self.entrata2=Entry(self) # Casella d'inserimento del lato 2
68 self.entrata2.grid(row=1, column=1, pady=2, padx=2, sticky=E+W+N+S)
69
70 self.etichetta3=Label(self, text="Lato 3 ") # Etichetta del lato 3
71 self.etichetta3.grid(row=2, column=0, padx=2)
72
73 self.entrata3=Entry(self) # Casella d'inserimento del lato 3
74 self.entrata3.grid(row=2, column=1, pady=2, padx=2, sticky=E+W+N+S)
75
76 self.bottone=Button(self, text="Calcola", command=self.calcola) # Bottone "Calcola"
77 self.bottone.grid(row=3, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
78
79 self.risultato=Label(self, textvariable=self.ris) # Testo che motra il risultato.
80 self.risultato.grid(row=4, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
81
82
83 # Raccogliamo l'input e calcoliamo l'area
84 def calcola(self):
85 try :
86 a=float(self.entrata1.get())
87 b=float(self.entrata2.get())
88 c=float(self.entrata3.get())
89 t=Triangolo(a,b,c)
90 self.ris.set("Area = "+str(t.area()))
91 except ValueError: self.ris.set("Devi inserire valori numerici.")
92 except "TriangoloImpossibile": self.ris.set("I lati immessi non possono formare un triangolo")
93
94
95 # Avvio del programma a condizione che non sia caricato come modulo
96 if __name__=="__main__":
97 d=Dialogo()
98 d.mainloop()
Risorse
[http://wiki.python.org/moin/GuiProgramming] BR Programmare interfacce grafiche con Python.
[http://www.pygtk.org/] {en} BR Sito ufficiale di PyGTK.
[http://www.parafernalia.org/pygtk/] {it} BR Documentazione in italiano di PyGTK.
[http://www.tcl.tk/] BR Sito degli sviluppatori tcl/tk è
[http://www.python.it/] {it} BR Il sito di riferimento per i programmatori python italiani! Qui potete trovare le traduzioni in italiano della documentazione ufficiale nonchè le FAQ sul linguaggio.
[http://www.python.org/] {en} BR Il sito ufficiale del linguaggio python. Trovate la documentazione in inglese aggiornata all'ultima versione dell'interprete, in più tutte le novità e le iniziative che ruotano intorno a questo linguaggio.