6702
Commento: Prima stesura
|
← Versione 27 del 28/01/2024 18.22.04 ⇥
16627
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
Describe LinguaggioPython/GUI here. Python GUI Ci sono un gran numero di toolkit disponibili per creare interfacce grafiche (GUI) con Python, da Tkinter (gia' compresa nella installazione di Python che consente l'interfaccia con X-Windows) a numerose altre multipiattaforma o specifiche per un certo ambiente. Tra le principali citiamo: '''wxPython''', '''PyGtk''' e '''PyQt''', ma altre possiamo trovarle qui: http://wiki.python.org/moin/GuiProgramming =PyGTK= GTK+ (acronimo che sta per GIMP ToolKit) è 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''' e' un set di moduli che permettono l'interfaccia tra Python e le librerie GTK, e' un toolkit orientato agli oggetti, permette quindi la possibilita' di riusare lo stesso codice in piu' applicazioni, e' stato portato ai Python coders da James Henstridge in collaborazione con un team di developers volontari. Il sito ufficiale (in inglese di PyGTK) e': http://www.pygtk.org/ La documentazione in italiano si trova qui: http://www.parafernalia.org/pygtk/ Questa è una versione del programma Triangolo2.py del wiki LinguaggioPython: |
## page was renamed from Programmazione/Python/GUI ## page was renamed from LinguaggioPython/GUI #format wiki #language it <<BR>> <<Indice(depth=1)>> <<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=631491"; rilasci="18.04 16.04 14.04")>> = Introduzione = All'interno di questa pagina sono presenti degli esempi di come creare delle semplici interfacce grafiche usando programmi come '''wxPython''', '''PyGTK''' e '''!PyQt'''. * tutto ciò che viene scritto preceduto dal carattere # è considerato dall'interprete come un commento. * questi esempii sono scritti per l'interprete '''Python 2.7.xx''', per la guida nella più recente versione '''Python 3.x''', vedi [[Programmazione/Python/InterfacceGrafichePython3 | InterfacceGrafichePython3]] = PyGTK = '''GTK+''' è un toolkit per la creazione di interfacce grafiche è stato progettato inizialmente come ausilio alla programmazione per [[Grafica/Gimp|GIMP]] ed è diventato una parte fondamentale dell'ambiente [[AmbienteGrafico/Gnome| 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 riutilizzare dello stesso codice in più applicazioni. == Esempio di applicazione == Questa è una versione del programma `AreaTriangolo2.py`, presente all'interno di [[Programmazione/Python/Listati#areatraingolo2| questa pagina]]. |
Linea 29: | Linea 30: |
Linea 69: | Linea 71: |
# e lo indiriziamo a una funzione | # e lo indirizziamo a una funzione |
Linea 73: | Linea 75: |
self.bottone = gtk.Button("Calcolo") # definisco il bottone calcolo self.bottone.connect("clicked", self.calcola) # catturo il click e lo indirizzo |
self.bottone = gtk.Button("Calcolo") # definiamo il bottone calcolo self.bottone.connect("clicked", self.calcola) # catturiamo il click e lo indirizzo |
Linea 79: | Linea 81: |
self.riga1 = gtk.HBox() # creo un contenitore dove | self.riga1 = gtk.HBox() # creiamo un contenitore dove |
Linea 81: | Linea 83: |
self.riga1.pack_start(self.etichetta1) # inserisco l'ediachetta e la casella di input nella 1 riga | self.riga1.pack_start(self.etichetta1) # inseriamo l'etichetta e la casella di input nella 1 riga |
Linea 93: | Linea 95: |
self.risultato = gtk.Label(" -- ") # creo un'etichetta per il risultato self.colonna = gtk.VBox() # creo un contenitore dove |
self.risultato = gtk.Label(" -- ") # creiamo un'etichetta per il risultato self.colonna = gtk.VBox() # creiamo un contenitore dove |
Linea 96: | Linea 98: |
self.colonna.pack_start(self.riga1) # e inserisco le righe, il pulsante e l'etichetta del risultato | self.colonna.pack_start(self.riga1) # e vi inseriamo le righe, il pulsante e l'etichetta del risultato |
Linea 101: | Linea 103: |
self.window.add(self.colonna) # inserisco il tutto nella finestra self.window.show_all() # comando ce visualizza la finestra ed il suo contenuto |
self.window.add(self.colonna) # inseriamo il tutto nella finestra self.window.show_all() # comando che visualizza la finestra ed il suo contenuto |
Linea 130: | Linea 132: |
}}} ''Listato del programma Area``Triangolo2.py con interfaccia grafica GTK+'' [[BR]][[BR]] |
}}} ''Listato del programma !AreaTriangolo2.py con interfaccia grafica GTK+'' <<BR>> = Tkinter = '''Tk''' è un piccolo toolkit per la creazione di interfacce grafiche è stato successivamente portato anche verso altri linguaggi come '''Python''', '''Ruby''', '''Lisp''', ecc.. '''Tkinter''' è il modulo '''Python''' che permette l'interfacciamento con '''Tk'''. == Esempio di applicazione == Di seguito viene mostrato un esempio di programma: {{{#!python #!/usr/bin/python # Importiamo la funzione sqrt (radice quadrata) dal modulo math from math import sqrt # Importiamo i widgets dal modulo Tkinter 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() }}} = wxPython = Questa è una versione del programma `AreaTriangolo2.py`, presente all'interno di [[Programmazione/Python/Listati#areatraingolo2| questa pagina]], che utilizza le librerie '''wxpython'''. == Esempio di applicazione == {{{#!python #!/usr/bin/python import wx #importiamo l'interfaccia grafica from string import digits # importiamo una variabile per il controllo dei dati in input from math import sqrt # importiamo la funzione sqrt per il calcolo della radicequadrata dal modulo math class Finestra(wx.Frame): #inizializza la finestra grafica def __init__(self,parent,id=-1,title='',pos = wx.Point(0,0),size = wx.Size(400,300),style = wx.DEFAULT_FRAME_STYLE,name = 'frame'): pre=wx.PreFrame() pre.Create(parent,id,title,pos,size,style,name) self.this = pre.this self.VwXinit() #quando si clicca X [angolo superiore destro della finestra] per chiudere la finestra def __del__(self): self.Ddel() return #definizione della presentazione della finestra e dei suoi oggetti interni def VwXinit(self): self.SetTitle("Finestra principale ") # titolo della finestra self.SetFont(wx.Font(11,74,90,90,0,"Modern No. 20")) self.StBar = self.CreateStatusBar(1,wx.ST_SIZEGRIP) self.StBar.SetStatusWidths([-1]) self.StBar.SetStatusText("Calcolo dell'area di un triangolo noti i lati",0) self.StBar.SetForegroundColour(wx.RED) self.SetBackgroundColour(wx.GREEN) self.st1 = wx.StaticText(self,-1,"Calcolo Area del Triangolo formula Erone ",wx.Point(20,30),wx.Size(400,30)) self.st1.SetFont(wx.Font(11,74,90,90,0,"Modern No. 20")) self.st1.SetForegroundColour(wx.RED) self.lato1 = wx.StaticText(self, -1, "Inserisci il 1 Lato [1..9] :",wx.Point(10,63)) self.latoa = wx.TextCtrl(self, -1, "", wx.Point(200, 60), wx.Size(100,-1)) self.lato2 = wx.StaticText(self, -1, "Inserisci il 2 Lato [1..9] :",wx.Point(10,93)) self.latob = wx.TextCtrl(self, -1, "", wx.Point(200, 90), wx.Size(100,-1)) self.lato3 = wx.StaticText(self, -1, "Inserisci il 3 Lato [1..9] :",wx.Point(10,123)) self.latoc = wx.TextCtrl(self, -1, "", wx.Point(200, 120), wx.Size(100,-1)) self.bt1 = wx.Button(self,-1,"",wx.Point(155,220),wx.Size(90,30)) self.bt1.SetLabel('Inserisci') self.bt1.SetFont(wx.Font(12,74,90,90,0,"Modern No. 20")) self.bt1.SetForegroundColour(wx.Colour(0,130,255)) wx.EVT_BUTTON(self.bt1,-1,self.Acquisisci) #manda in esecuzione i controlli e # se superati calcola l'area return #acquisisce i dati inseriti li controlla e se puo' calcola l'area def Acquisisci(self,event): a=str(self.latoa.GetValue()) b=str(self.latob.GetValue()) c=str(self.latoc.GetValue()) vero = Finestra.Contronum(self,a) if vero == "F": avviso = "Il lato a ="+ a+" <-- non e' di tipo numerico; Riprova " msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR) return vero = Finestra.Contronum(self,b) if vero == "F": avviso = "Il lato b ="+ b+" <-- non e' di tipo numerico; Riprova " msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR) return vero =Finestra.Contronum(self,c) if vero == "F": avviso = "Il lato c ="+ c+" <-- non e' di tipo numerico; Riprova " msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR) return # li trasforma in virgola mobile e poi verifica che corrispondano ad un triangolo a= float(a) b=float(b) c=float(c) p = (a+b+c)/2.0 if p <=a or p <= b or p <= c: avviso ='I dati immessi non sono quelli di un triangolo; Riprova' msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR) return else: # calcolo area triangolo area =sqrt(p*(p-a)*(p-b)*(p-c)) avviso =" L'area del triangolo misura Mq "+str(area) msg = wx.MessageBox( avviso, 'Risultato',wx.OK ) return def Contronum(self,valore): # serve per la verifica che i dati immessi siano di tipo numerico vero = "F" for i in range(len(valore)): if valore[i] in digits : vero = "T" continue else: vero = "F" break return vero def Ddel(self): #serve per la chiusura della finestra return class App(wx.App):# finestra da cui derivano tutte le finestre successive def OnInit(self): self.main = Finestra(None,-1,'') self.main.Show() return 1 def main():#lancia il programma in quanto non caricato come modulo application = App(0) application.MainLoop() if __name__ == '__main__': main() }}} = Ulteriori risorse = * [[http://wiki.python.org/moin/GuiProgramming|Programmare interfacce grafiche con Python]] * [[http://www.wxpython.org|Sito ufficiale di wxpython]] * [[http://www.pygtk.org/|Sito ufficiale di PyGTK]] * [[http://www.tcl.tk/|Sito degli sviluppatori tcl/tk]] * [[http://www.python.it/|Sito di riferimento per i programmatori python italiani]] * [[http://www.python.org/|Il sito ufficiale del linguaggio python]] |
Linea 133: | Linea 393: |
CategoryNuoviDocumenti | CategoryProgrammazione |
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
All'interno di questa pagina sono presenti degli esempi di come creare delle semplici interfacce grafiche usando programmi come wxPython, PyGTK e PyQt.
- tutto ciò che viene scritto preceduto dal carattere # è considerato dall'interprete come un commento.
questi esempii sono scritti per l'interprete Python 2.7.xx, per la guida nella più recente versione Python 3.x, vedi InterfacceGrafichePython3
PyGTK
GTK+ è un toolkit per la creazione di interfacce grafiche è stato progettato inizialmente come ausilio alla programmazione per 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 riutilizzare dello stesso codice in più applicazioni.
Esempio di applicazione
Questa è una versione del programma AreaTriangolo2.py, presente all'interno di questa pagina.
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+
Tkinter
Tk è un piccolo toolkit per la creazione di interfacce grafiche è stato successivamente portato anche verso altri linguaggi come Python, Ruby, Lisp, ecc.. Tkinter è il modulo Python che permette l'interfacciamento con Tk.
Esempio di applicazione
Di seguito viene mostrato un esempio di programma:
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()
wxPython
Questa è una versione del programma AreaTriangolo2.py, presente all'interno di questa pagina, che utilizza le librerie wxpython.
Esempio di applicazione
1 #!/usr/bin/python
2
3 import wx #importiamo l'interfaccia grafica
4
5 from string import digits # importiamo una variabile per il controllo dei dati in input
6 from math import sqrt # importiamo la funzione sqrt per il calcolo della radicequadrata dal modulo math
7
8 class Finestra(wx.Frame):
9 #inizializza la finestra grafica
10 def __init__(self,parent,id=-1,title='',pos = wx.Point(0,0),size = wx.Size(400,300),style = wx.DEFAULT_FRAME_STYLE,name = 'frame'):
11 pre=wx.PreFrame()
12 pre.Create(parent,id,title,pos,size,style,name)
13 self.this = pre.this
14 self.VwXinit()
15
16 #quando si clicca X [angolo superiore destro della finestra] per chiudere la finestra
17 def __del__(self):
18 self.Ddel()
19 return
20
21 #definizione della presentazione della finestra e dei suoi oggetti interni
22 def VwXinit(self):
23 self.SetTitle("Finestra principale ") # titolo della finestra
24
25 self.SetFont(wx.Font(11,74,90,90,0,"Modern No. 20"))
26 self.StBar = self.CreateStatusBar(1,wx.ST_SIZEGRIP)
27 self.StBar.SetStatusWidths([-1])
28 self.StBar.SetStatusText("Calcolo dell'area di un triangolo noti i lati",0)
29 self.StBar.SetForegroundColour(wx.RED)
30 self.SetBackgroundColour(wx.GREEN)
31 self.st1 = wx.StaticText(self,-1,"Calcolo Area del Triangolo formula Erone ",wx.Point(20,30),wx.Size(400,30))
32
33 self.st1.SetFont(wx.Font(11,74,90,90,0,"Modern No. 20"))
34 self.st1.SetForegroundColour(wx.RED)
35 self.lato1 = wx.StaticText(self, -1, "Inserisci il 1 Lato [1..9] :",wx.Point(10,63))
36 self.latoa = wx.TextCtrl(self, -1, "", wx.Point(200, 60), wx.Size(100,-1))
37
38 self.lato2 = wx.StaticText(self, -1, "Inserisci il 2 Lato [1..9] :",wx.Point(10,93))
39 self.latob = wx.TextCtrl(self, -1, "", wx.Point(200, 90), wx.Size(100,-1))
40
41 self.lato3 = wx.StaticText(self, -1, "Inserisci il 3 Lato [1..9] :",wx.Point(10,123))
42 self.latoc = wx.TextCtrl(self, -1, "", wx.Point(200, 120), wx.Size(100,-1))
43
44 self.bt1 = wx.Button(self,-1,"",wx.Point(155,220),wx.Size(90,30))
45 self.bt1.SetLabel('Inserisci')
46 self.bt1.SetFont(wx.Font(12,74,90,90,0,"Modern No. 20"))
47 self.bt1.SetForegroundColour(wx.Colour(0,130,255))
48
49 wx.EVT_BUTTON(self.bt1,-1,self.Acquisisci) #manda in esecuzione i controlli e
50 # se superati calcola l'area
51
52 return
53 #acquisisce i dati inseriti li controlla e se puo' calcola l'area
54 def Acquisisci(self,event):
55 a=str(self.latoa.GetValue())
56 b=str(self.latob.GetValue())
57 c=str(self.latoc.GetValue())
58
59 vero = Finestra.Contronum(self,a)
60 if vero == "F":
61 avviso = "Il lato a ="+ a+" <-- non e' di tipo numerico; Riprova "
62 msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR)
63 return
64 vero = Finestra.Contronum(self,b)
65 if vero == "F":
66 avviso = "Il lato b ="+ b+" <-- non e' di tipo numerico; Riprova "
67 msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR)
68 return
69 vero =Finestra.Contronum(self,c)
70 if vero == "F":
71 avviso = "Il lato c ="+ c+" <-- non e' di tipo numerico; Riprova "
72 msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR)
73 return
74 # li trasforma in virgola mobile e poi verifica che corrispondano ad un triangolo
75 a= float(a)
76 b=float(b)
77 c=float(c)
78
79 p = (a+b+c)/2.0
80
81 if p <=a or p <= b or p <= c:
82 avviso ='I dati immessi non sono quelli di un triangolo; Riprova'
83 msg = wx.MessageBox( avviso, 'Errore',wx.OK | wx.ICON_ERROR)
84 return
85 else:
86 # calcolo area triangolo
87 area =sqrt(p*(p-a)*(p-b)*(p-c))
88 avviso =" L'area del triangolo misura Mq "+str(area)
89 msg = wx.MessageBox( avviso, 'Risultato',wx.OK )
90
91 return
92
93 def Contronum(self,valore): # serve per la verifica che i dati immessi siano di tipo numerico
94
95 vero = "F"
96 for i in range(len(valore)):
97
98 if valore[i] in digits :
99
100 vero = "T"
101
102 continue
103
104 else:
105
106 vero = "F"
107
108 break
109 return vero
110
111 def Ddel(self): #serve per la chiusura della finestra
112
113 return
114
115
116
117 class App(wx.App):# finestra da cui derivano tutte le finestre successive
118 def OnInit(self):
119
120 self.main = Finestra(None,-1,'')
121 self.main.Show()
122
123 return 1
124
125 def main():#lancia il programma in quanto non caricato come modulo
126
127 application = App(0)
128 application.MainLoop()
129
130 if __name__ == '__main__':
131 main()