6849
Commento:
|
11180
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 135: | Linea 135: |
== 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]] [[BR]] Il sito degli sviluppatori tcl/tk è http://www.tcl.tk/ === Esempio di applicazione === Presentiamo il solito programma dimostrativo che calcola l'area di un triangolo. {{{#!python #!/usr/bin/python # Importiamo la funzione sqrt (radice quadrata) dal modulo math from math import sqrt from Tkinter import * # Definiamo una classe Triangolo con tre metodi: # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo. class Triangolo: # Attributi della classe (le misure dei tre lati) a, b, c = 0, 0, 0 # Metodo costruttore def __init__(self,a,b,c): # Controlliamo se i tre valori dati possono effettivamente essere le misure dei lati di un triangolo. # Caso contrario solleviamo una bella eccezione! if ((a+b>c) and (a+c>b) and (b+c>a)): self.a=a self.b=b self.c=c else: # abbiamo dato un nome ed un essaggio di errore all'eccezione raise "TriangoloImpossibile" , "I lati non possono formare un triangolo" # Metodo che calcola il perimetro def perimetro(self): return self.a + self.b + self.c # Metodo che calcola l'area (tramite formula di Erone) def area(self): p=self.perimetro()/2.0 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c)) # questa e' la classe che definisce l'interfaccia grafica class Dialogo(Frame): def __init__(self): Frame.__init__(self) self.master.title("Area triangolo.") # Diamo il titolo alla finestra. self.master.minsize(250,150) # Dimensioni minime della finestra self.grid(sticky=E+W+N+S) self.ris=StringVar() # Questa variabile stringa viene usata per self.ris.set("---") # aggiornare la gui quando il risultato cambia. # Rendiamo ridimensionabile la finestra dell'applicazione top=self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) for i in range(5): self.rowconfigure(i, weight=1) self.columnconfigure(1, weight=1) self.etichetta1=Label(self, text="Lato 1 ") # Etichetta del lato 1 self.etichetta1.grid(row=0, column=0, padx=2) self.entrata1=Entry(self) # Casella d'inserimento del lato 1 self.entrata1.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S) self.etichetta2=Label(self, text="Lato 2 ") # Etichetta del lato 2 self.etichetta2.grid(row=1, column=0, padx=2) self.entrata2=Entry(self) # Casella d'inserimento del lato 2 self.entrata2.grid(row=1, column=1, pady=2, padx=2, sticky=E+W+N+S) self.etichetta3=Label(self, text="Lato 3 ") # Etichetta del lato 3 self.etichetta3.grid(row=2, column=0, padx=2) self.entrata3=Entry(self) # Casella d'inserimento del lato 3 self.entrata3.grid(row=2, column=1, pady=2, padx=2, sticky=E+W+N+S) self.bottone=Button(self, text="Calcola", command=self.calcola) # Bottone "Calcola" self.bottone.grid(row=3, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S) self.risultato=Label(self, textvariable=self.ris) # Testo che motra il risultato. self.risultato.grid(row=4, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S) # Raccogliamo l'input e calcoliamo l'area def calcola(self): try : a=float(self.entrata1.get()) b=float(self.entrata2.get()) c=float(self.entrata3.get()) t=Triangolo(a,b,c) self.ris.set("Area = "+str(t.area())) except ValueError: self.ris.set("Devi inserire valori numerici.") except "TriangoloImpossibile": self.ris.set("I lati immessi non possono formare un triangolo") # Avvio del programma a condizione che non sia caricato come modulo if __name__=="__main__": d=Dialogo() d.mainloop() }}} |
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, PyGTK e PyQt, 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.
PyGTK è 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. Nell'installazione standard di Ubuntu è già presente tutto il necessario.
Il sito ufficiale (in inglese) di PyGTK e':
La documentazione in italiano si trova qui:
http://www.parafernalia.org/pygtk/
Esempio di applicazione
Questa è una versione del programma AreaTriangolo2.py del wiki LinguaggioPython che usa le GUI GTK+:
1 #!/usr/bin/python
2
3 # Importiamo la funzione sqrt (radice quadrata) dal modulo math
4 from math import sqrt
5 # Importiamo le librerie per l'interfaccia grafica GTK
6 import pygtk
7 pygtk.require('2.0')
8 import gtk
9
10 # Definiamo una classe Triangolo con tre metodi:
11 # un costruttore, un metodo che calcola il perimetro e uno che calcola l'area del triangolo.
12 class Triangolo:
13
14 # Attributi della classe (le misure dei tre lati)
15 a, b, c = 0, 0, 0
16
17 # Metodo costruttore, in python i costruttori hanno il nome speciale __init__
18 def __init__(self,a,b,c):
19 # Controlliamo se i tre valori dati possono effettivamente
20 #essere le misure dei lati di un triangolo.
21 # Caso contrario solleviamo una bella eccezione!
22 if ((a+b>c) and (a+c>b) and (b+c>a)):
23 self.a=a
24 self.b=b
25 self.c=c
26 else:
27 raise "TriangoloImpossibile" , "I lati non possono formare un triangolo"
28 # abbiamo dato un nome ed un essaggio di errore all'eccezione
29 # Metodo che calcola il perimetro
30 def perimetro(self):
31 return self.a + self.b + self.c
32
33 # Metodo che calcola l'area (tramite formula di Erone)
34 def area(self):
35 p=self.perimetro()/2.0
36 return sqrt(p*(p-self.a)*(p-self.b)*(p-self.c))
37
38 #questa e' la classe che definisce l'interfaccia grafica
39 class Dialogo:
40 def __init__(self):
41 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) # definiamo la finestra
42 self.window.set_title("Calcolo area triangolo")# le diamo in titolo
43 self.window.connect("destroy", self.distruggi) # catturiamo l'evento destroy
44 #(es. la X che chiude la finestra)
45 # e lo indirizziamo a una funzione
46 # che termina il programma
47 self.window.set_resizable(False) # la finestra non e' modificabile in dimensioni
48 self.window.set_position(gtk.WIN_POS_MOUSE) # e compare nell'attuale posizione del muose
49 self.bottone = gtk.Button("Calcolo") # definiamo il bottone calcolo
50 self.bottone.connect("clicked", self.calcola) # catturiamo il click e lo indirizzo
51 # alla funzione che esegue il calcolo
52 self.etichetta1 = gtk.Label("Lato 1 ") # testo che richiede la lunghezza del 1 lato
53 self.entrata1 = gtk.Entry(10) # casella per l'inserimento della lunghezza
54 # del 1 lato
55 self.riga1 = gtk.HBox() # creiamo un contenitore dove
56 # gli oggetti sono disposti in orizzontale (una riga)
57 self.riga1.pack_start(self.etichetta1) # inseriamo l'etichetta e la casella di input nella 1 riga
58 self.riga1.pack_start(self.entrata1)
59 self.etichetta2 = gtk.Label("Lato 2 ") # e cosi' via ...
60 self.entrata2 = gtk.Entry(10)
61 self.riga2 = gtk.HBox()
62 self.riga2.pack_start(self.etichetta2)
63 self.riga2.pack_start(self.entrata2)
64 self.etichetta3 = gtk.Label("Lato 3 ")
65 self.entrata3 = gtk.Entry(10)
66 self.riga3 = gtk.HBox()
67 self.riga3.pack_start(self.etichetta3)
68 self.riga3.pack_start(self.entrata3)
69 self.risultato = gtk.Label(" -- ") # creiamo un'etichetta per il risultato
70 self.colonna = gtk.VBox() # creiamo un contenitore dove
71 # gli oggetti sono disposti in verticale (una colonna)
72 self.colonna.pack_start(self.riga1) # e vi inseriamo le righe, il pulsante e l'etichetta del risultato
73 self.colonna.pack_start(self.riga2)
74 self.colonna.pack_start(self.riga3)
75 self.colonna.pack_start(self.bottone)
76 self.colonna.pack_start(self.risultato)
77 self.window.add(self.colonna) # inseriamo il tutto nella finestra
78 self.window.show_all() # comando che visualizza la finestra ed il suo contenuto
79
80 # funzione che raccoglie gli input, crea un'istanza Triangolo e ne richiede il calcolo dell'area
81 def calcola(self, widget,data = None):
82 try:
83 a = float(self.entrata1.get_text()) # legge i dati inseriti nella 1 casella
84 b = float(self.entrata2.get_text())
85 c = float(self.entrata3.get_text())
86 triangolo = Triangolo(a, b, c)
87 self.risultato.set_text(str(triangolo.area()))
88 except ValueError: # catturo l'eccezione
89 self.risultato.set_text("Devi inserire valori numerici.")
90 except "TriangoloImpossibile": # catturo la seconda eccezione
91 self.risultato.set_text("I lati immessi non possono formare un triangolo")
92 # funzione di uscita
93 def distruggi(self, widget,data = None):
94 print data
95 return gtk.main_quit()
96 # funzione di lancio della GUI
97 def main(self):
98 gtk.main()
99
100 # avvio del programma a condizione che non sia caricato come modulo
101 print __name__
102 if __name__ == "__main__":
103 base = Dialogo()
104 base.main()
Listato del programma AreaTriangolo2.py con interfaccia grafica GTK+BRBR
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 BR Il sito degli sviluppatori tcl/tk è http://www.tcl.tk/
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 from Tkinter import *
6
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()