Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

Versione 3 del 26/09/2006 22.54.01

Nascondi questo messaggio

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 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 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/

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 indiriziamo 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")        # definisco il bottone calcolo
  50         self.bottone.connect("clicked", self.calcola) # catturo 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()      # creo un contenitore dove 
  56                                      # gli oggetti sono disposti in orizzontale (una riga)
  57         self.riga1.pack_start(self.etichetta1) # inserisco l'ediachetta 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(" -- ") # creo un'etichetta per il risultato
  70         self.colonna = gtk.VBox()          # creo un contenitore dove 
  71                                            # gli oggetti sono disposti in verticale (una colonna)
  72         self.colonna.pack_start(self.riga1) # e inserisco 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)  # inserisco il tutto nella finestra
  78         self.window.show_all()         # comando ce 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


CategoryNuoviDocumenti