giovedì 3 settembre 2009

Interfaccia utente in Python (GUI)




Le interfacce principali che si possono utilizzare con Python per creare una maschera utente sono:

Tkinter (integrato in Python)

WxPython
PyGtk
e
PyQT
che però non è freeware

Ho scelto di utilizzare PyGtk.
Di seguito i passi da seguire per installare Python e il necessario per compilare il primo script PyGtk in Windows XP

1) Scaricare da qui l'ultima versione di Active Python e installarlo:
http://www.activestate.com/activepython/downloads/
la versione Windows (x86)

2) Scaricare da qui l'ultima versione di GTK+ bundle
http://ftp.gnome.org/pub/GNOME/binaries/win32/gtk+/
- entrare nella directory (ad esempio 2.16)
- scaricare la versione "gtk+-bundle 2.16.....zip")
- creare una cartella "c:\gtk"
- scompattare li dentro il contenuto del file "gtk+-bundle 2.16.....zip"
- impostare la path di sistema in modo che punti a "c:\gtk\bin"
-- click destro sull'icona "risorse del computer"
-- proprietà
-- scegliere il tab "Avanzate"
-- bottone "Variabili d'ambiente"
-- aggiungere in fondo alla variabile di sistema "path" il percorso "c:\gtk\bin" separandolo da precedente con un ";" = ";c:\gtk\bin"

3) Installare PyGtk
da questo link
http://www.pygtk.org/downloads.html
scaricare e installare l'ultima versione adatta al Python precedentemente installato di
- PyCairo
- PyGObject
- PyGtk

Ora possiamo scrivere il nostro primo script Python Gtk che chiamiamo TestPyGtk.py
import gtk

# This function will be called whenever you click on your button:
def click_handler(widget) :
# quit the application:
gtk.main_quit()

# Create the main window:
win = gtk.Window()

# Organize widgets in a vertical box:
vbox = gtk.VBox()
win.add(vbox)

# Make a pushbutton:
button = gtk.Button("Push me!")

# When it's clicked, call our handler:
button.connect("clicked", click_handler)

# Add it to the window:
vbox.pack_start(button)
button.show()

# Obey the window manager quit signal:
win.connect("destroy", gtk.main_quit)

vbox.show()
win.show()
gtk.main()
Salvando il file in una cartella e clicckano due volte su di esso apparirà il bottone "Push Me".

Si può anche provare il seguente script per Tkinter che dovrebbe funzionare solo installando ActivePython.

from Tkinter import * # importo il modulo
# costruisco una mia classe che gestisce la finestra
class Application(Frame):
# metodo che scrive un messaggio a video
def scrivi_messaggio(self):
self.mess["text"] = "Ciao a tutti!",
# metodo che pulisce il messaggio a video
def cancella_messaggio(self):
self.mess["text"] = "",
# metodo costruttore che crea gli oggetti grafici
def __init__(self, master=None):
f = Frame(master)
f.pack()
# crea il bottone di uscita (di colore rosso)
self.esci = Button(f)
self.esci["text"] = "QUIT"
self.esci["fg"] = "red"
self.esci["command"] = f.quit
self.esci.pack({"side": "left"})
# crea il bottone che permette di scrivere il messaggio
self.butt_mess = Button(f)
self.butt_mess["text"] = "Scrivi",
self.butt_mess["command"] = self.scrivi_messaggio
self.butt_mess.pack({"side": "left"})
# crea il bottone che permette di pulire il messaggio
self.butt_canc_mess = Button(f)
self.butt_canc_mess["text"] = "Cancella",
self.butt_canc_mess["command"] = self.cancella_messaggio
self.butt_canc_mess.pack({"side": "left"})
# crea l'oggetto grafico che contiene il messaggio
self.mess = Message(f)
self.mess["text"] = "",
self.mess.pack({"side": "left"})

# corpo principale del programma
finestra = Tk()
app = Application(finestra)
finestra.mainloop()

Di seguito alcuni i link da cui ho estratto questa documentazione e altri con informazioni utili.

http://programmazione.html.it/guide/lezione/1302/gui/
http://wiki.python.org/moin/GuiProgramming
http://boa-constructor.sourceforge.net/#wxWindows
http://www.learningpython.com/2006/05/07/creating-a-gui-using-pygtk-and-glade/
http://zetcode.com/wxpython/
http://zetcode.com/tutorials/pygtktutorial/
http://www.linuxjournal.com/article/4702
http://faq.pygtk.org/index.py?req=show&file=faq21.001.htp
http://www.python-it.org/forum/index.php?topic=2412.0
http://www.linuxplanet.com/linuxplanet/tutorials/6750/

http://ubuntuforums.org/showthread.php?t=453419
http://hackerforum.devil.it/viewtopic.php?p=90196&sid=d0f60e8467754534c42185d30c707343

http://www.python-it.org/forum/index.php?topic=809.0
http://www.swf2go.com/wiki/Default.aspx?Page=PyS60Sample_BeMyLips&AspxAutoDetectCookieSupport=1
http://www.programmazione.it/index.php?entity=eitem&idItem=40982