![]() |
|
|||||
Le FAQ di Python - Sezione 6Traduzione della FAQ di http://www.python.org aggiornata al 5 settembre 2003, Revisione 6607. Questo documento, di pubblico dominio, è stato tradotto e revisionato da Meo Bogliolo: potete contattarlo per qualsiasi commento o correzione. 1. FAQ sull'interfaccia grafica1.1 Domande generali1.1.1 Quali toolkit grafici indipendenti dalla piattaforma esistono per Python?A seconda delle piattaforme di vostro interesse ve ne sono diversi. 1.1.1.1 TkinterIl rilascio standard di Python comprende un'interfaccia orientata agli oggetti per i widget Tcl/Tk, che viene chiamata Tkinter. E' probabilmente la piu' semplice da installare ed utilizzare. Per maggiori informazioni su Tk, compresi i puntatori ai sorgenti, si puo' vedere la home page di Tcl/Tk su http://www.tcl.tk. Tcl/Tk e' completamente portabile sulle piattaforme MacOS, Windows e Unix. 1.1.1.2 wxWindowswxWindows è una libreria di classi grafiche scritta in C++ che e' un'interfaccia portabile verso varie librerie specifiche di piattaforma; wxPython è un'interfaccia Python a wxWindows. wxWindows supporta Windows e MacOS, su Unix supporta sia i toolkit GTk+ che Motif. wxWindows conserva l'aspetto dei sottostanti toolkit grafici richiamati, e comprende un ricco insieme di widget ed un'ampia collezioni di classi GDI. Si veda, per maggiori dettagli, the wxWindows page. wxPython [il sito e' ridiretto su wxPython NdT] è un modulo di estensione che ricopre molte delle classi C++ di wxWindows e che sta rapidamente acquistando popolarità tra i programmatori Python. wxPython puo' essere scaricato dalla distribuzione sorgente o CVS di wxWindows, oppure direttamente dalla sua home page. 1.1.1.3 QtSono disponibili i collegamenti PyQt per Qt e PyKDE per KDE. Se si scrive un programma opensource non si deve pagare per Qt alcuna licenza, ma se si sta sviluppando un'applicazione di cui si vogliono conservare i diritti, è necessario acquistare una licenza di PyQt da Riverbank Computing ed una licenza di Qt da Trolltech. 1.1.1.4 GTk+I collegamenti per il PyGTk: GTk+ toolkit sono stati sviluppati da James Henstridge; si veda ftp://ftp.gtk.org/pub/gtk/python/. 1.1.1.5 FLTKI collegamenti Python per il FLTK toolkit, un semplice ma potente e maturo sistema a finestre inter-piattaforma sono disponibili presso il progetto PyFLTK project. 1.1.1.6 FOXE' disponibile un wrapper di FOX toolkit chiamato FXpy. FOX supporta sia Unix che Windows. 1.1.1.7 OpenGLPer i collegamenti a OpenGL si veda PyOpenGL. 1.1.2 Quali toolkit grafici specifici per piattaforma esistono per Python?The Mac port di Jack Jansen ha un ricco e sempre crescente insieme di moduli che supportano le chiamate native al toolbox Mac. Tale porting include il supporto per le librerie MacOS9 e MacOS X Carbon. Installando il PyObjc Objective-C bridge, i programmi Python possono utilizzare le librerie MacOS X Cocoa. Si veda la documentazione fornita assieme al porting Mac. Pythonwin di Mark Hammond comprende un'interfaccia alle Microsoft Foundation Classes ed un ambiente di programmazione Python che la utilizza, scritto principalmente in Python stesso. 1.2 Domande su Tkinter1.2.1 Come posso freezare un'applicazione Tkinter?Freeze e' uno strumento per creare applicazioni stand-alone. Quando si effettua un freeze di un'applicazione Tkinker il risultato non è una vera e propria applicazione stand-alone poiche' per funzionare necessita ancora delle librerie Tcl e Tk. Una soluzione e' quella di distribuire l'applicazione con le librerie tcl e tk e puntare a queste a livello di run-time impiegando le variabili d'ambiente TCL_LIBRARY e TK_LIBRARY. Per ottenere una vera applicazione stand-alone debbono essere integrati nell'applicazione anche gli script Tcl che costituiscono la libreria. Uno strumento che consente questo è SAM (stand-alone modules): fa parte della distribuzione Tix (http://tix.mne.com) [il sito non sembra piu' attivo ma ho trovato il Tix Widget Set for Tk/Tcl and Python su SourceForge NdT]. L'applicazione stand-alone si ottiene compilando Tix con il SAM abilitato, effettuando le corrette chiamate a Tclsam_init etc nei moduli Python/tkappinit.c, e collegando con le libtclsam e libtksam (debbono essere incluse anche le librerie Tix libraries). 1.2.2 Si possono gestire eventi Tk mentre si aspetta per l'I/O?Si, e non c'e' neanche bisogno di utilizzare i thread! Ma bisogna cambiare un poco il codice per l'I/O. Tk possiede l'equivalente della chiamata Xt XtAddInput() che consente di registrare una funzione di callback che verra' chiamata dal mainloop Tk mentre l'I/O è effettuto su un file descriptor. Ecco quello che serve: from Tkinter import tkinter tkinter.createfilehandler(file, mask, callback) Il file puo' essere sia un file Python, sia un oggetto socket (attualmente qualunque oggetto avente un metodo fileno()), che un normale numero intero di file descriptor. mask deve essere una delle costanti tkinter.READABLE o tkinter.WRITABLE. La funzione di callback e' chiamata come nell'esempio seguente: callback(file, mask) La funzione di callback deve essere deregistrata al termine, mediante: tkinter.deletefilehandler(file) Nota: poiche' non e' possibile sapere quanti byte sono disponibili per la lettura non è possibile utilizzare i metodi read o readline di un oggetto file Python perche' questi richiedono di specificare un numero predefinito di byte. Con i sockets, i metodi recv() oppure recvfrom() operano correttamente; per gli altri file basta usare os.read(file.fileno(), maxbytecount). 1.2.3 Le assegnazioni dei tasti non funzionano con Tkinter: perche'?Un problema molto comune è che i gestori di eventi registrati con il metodo bind() non vengano eseguiti quando viene premuto il tasto corrispondente. La piu' comune causa e' che il widget a cui sono registrati i bind() non ha il "keyboard focus". è opportunto controllare la documentazione PyTk sul comando focus. Tipicamente il focus viene assegnato ad un widget quando si clicca su di esso (ma questo non avviene per le label; si veda l'opzione takefocus).
|