Dimensione: 10194
Commento:
|
Dimensione: 5226
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 7: | Linea 7: |
<<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=631491"; rilasci="18.04")>> | <<Informazioni(forum=""; rilasci="18.04")>> |
Linea 12: | Linea 12: |
Tkinter è di norma preinstallato in Ubuntu, mentre wxPython può essere installato con: {{{ sudo apt install python3-wxgtk4.0 }}} |
|
Linea 121: | Linea 127: |
= 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() }}} |
Indice
Errore nella macro informazioni:
Il link https:// non è valido!
Il link https:// non è valido!
Introduzione
All'interno di questa pagina sono presenti degli esempi di come creare delle semplici interfacce grafiche usando programmi come wxPython, Tkinter e PyQt.
Tkinter è di norma preinstallato in Ubuntu, mentre wxPython può essere installato con:
sudo apt install python3-wxgtk4.0
Tkinter
Tk è un piccolo toolkit per la creazione d'interfacce grafiche è stato successivamente portato anche verso altri linguaggi (Python, Ruby, Lisp, ...). Tkinter è il modulo Python che permette l'interfacciamento con Tk.
Esempio di applicazione
Di seguito viene mostrato un esempio di programma:
1 #!/usr/bin/python3
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()