1. INTRODUZIONE A
WXPYTHON
Lezione 5
Paolo Ferretti per Deltapromo
URL corso: http://corso-deltapromo.paoloferretti.net/
http://www.paoloferretti.net
paolo@paoloferretti.net
2. COS’È WXPYTHON
• Libreria per creare interfacce grafiche
• Wrapper per WxWidgets, libreria grafica multi-piattaforma
• Implementato come estensione di Python, quindi codice nativo
• Open source e cross-platform
6. APPLICATION OBJECT
• Senza Application Object l’applicazione WxPython non può
funzionare
• Risponde a tutti gli eventi ignorati dal resto dell’applicazione
• Lancia la Top Level Window
7. APPLICATION OBJECT
• Istanza di wx.App o di una sottoclasse
• La sua funzione è di lanciare e gestire il main loop
• Definisce le proprietà globali dell’applicazione
• wx.PySimpleApp velocizza le cose in caso di applicazioni
semplici
8. APPLICATION OBJECT
LIFECYCLE
• Il lifecycle:
• inizia quando un’istanza di wx.App è creata
• finisce quando l’ultima finestra è stata chiusa
• Non corrisponde obbligatoriamente con l’inizio e la fine
dell’esecuzione del programma
9. APPLICATION OBJECT
LIFECYCLE
• Il
nostro script può eseguire attività prima e dopo la creazione
dell’oggetto wx.App
• E’ fondamentale che tutta l’attività WxPython rimanga
all’interno del ciclo di vita dell’istanza di wx.App
11. TOP LEVEL WINDOW
• Finestra principale
• Gestisce le funzioni dell’applicazione
• Presenta queste funzioni all’utente
12. TOP LEVEL WINDOW
• Può essere un’istanza di wx.Frame o wx.Dialog
• Normalmente è una sotto classe di wx.Frame
13. DIRIGERE L’OUTPUT
• Un normale script dirige l’output su sys.stdout
• Si può decidere di far gestire l’output dall’applicazione (default
in ambiente Windows)
• Il
redirect può essere specificato esplicitamente quando si crea
un’applicazione
• wx.App(redirect=True)
14. SHUTDOWN APPLICAZIONE
• Normalmente l’applicazione viene fermata quando l’ultima top
level window viene chiusa
• ultima finestra senza parent
• Durante lo shutdown wxPython cancella tutte le finestre e
libera le risorse
• E’ possibile un cleanup personalizzato col metodo OnExit()
15. SHUTDOWN APPLICAZIONE
• Anche
se l’applicazione è chiusa chiamando wx.Exit(), il
metodo OnExit() viene chiamato
• Senon vogliamo chiudere l’applicazione dopo la chiusura
dell’ultima applicazione:
• SetExitOnFrameDelete(False)
• l’applicazione resterà viva fino alla chiamat di wx.Exit()
16. EVENT HANDLING
• La
gestione degli eventi è il meccanismo fondamentale in una
applicazione wxPython
• Una applicazione basata sugli eventi si chiama event driven
17. COS’È UN EVENTO
• Un evento è qualcosa che accade nel sistema e che può
essere catturato e gestito dalla nostra applicazione
• Gli eventi possono essere di
• basso livello: movimento del mouse, pressione di un tasto
• alto livello: click su pulsante, selezione su menu
18. COS’È UN EVENTO
• Può essere creato dal sistema operativo
• Unaapplicazione wx funziona associando ogni evento ad un
pezzo di codice
19. TERMINOLOGIA DEGLI
EVENTI
• Event: qualcosa che accade durante l’esecuzione
dell’applicazione e che richiede una risposta
• Event object: la rappresentazione concreta di un evento in
wxPython. Normalmente istanze di wx.Event e sue sottoclassi
• Event type: un ID intero che wxPython assegna ad ogni
event object. Questo ci dà più informazioni sulla natura di un
evento
20. TERMINOLOGIA DEGLI
EVENTI
• Event source: l’oggetto wxPython che crea l’evento. Es:
pulsante, menu, ecc...
• Event driven: programma strutturato per aspettare e
rispondere agli eventi
• Event queue: lista di eventi già accaduti ma non ancora
processati
21. TERMINOLOGIA DEGLI
EVENTI
• Event handler: una funzione (o metodo) invocata in
risposta ad un evento
• Event binder: oggetto wxPython che incapsula le relazioni
tra uno specifico widget, uno specifico event type e uno
specifico event handler. Tutti gli eventi devono essere registrati
con un event binder
•
24. SIZERS
• Oggetti per la gestione del layout
• Non sono container
• Sono algoritmi per la rappresentazione dei widget
• Sono tutti sottoclassi di wx.Sizer
25. SIZER PREDEFINITI IN
WXPYTHON
• Grid: layout
tabellare, ottimo quando i widget sono delle
stesse dimensioni
• FlexGrid: layout tabellare, ma con widget di dimensioni diverse
• GridBag: layout tabellare irregolare. Il più flessibile
• Box: elementi allineati su righe orizzontali o verticali
• StaticBox: come Box, ma con un title e un riquadro
26. COME USO UN SIZER
• Aggiungere il sizer ad un container usando il metodo SetSizer
• Aggiungere i widget al sizer col metodo Add
• Abilitareil sizer a calcolare le proprie dimensioni col metodo
Fit (opzionale)