Capitolo 10
Finestre di dialogo comuni
wxFileDialog
Nelle proprie applicazioni è frequente l'uso di finestre di dialogo standard come quella usata per aprire/salvare i file; il vantaggio dell'uso di queste finestre consiste nel non dover riscrivere inutilmente codice e in più avere un'interfaccia grafica familiare e quindi più semplice da usare per l'utente.
01: dlg = wxFileDialog(None, "Scegli un file", ".",
02: "nome file di default.txt",
03: "File di testo (*.txt)|*.txt|Tutti i file|*.*",
04: wxOPEN)
05: if dlg.ShowModal() == wxID_OK:
06: wxMessageBox("Il file scelto è " + dlg.GetFilename() +
07: "\nIl percorso completo è " + dlg.GetPath())
08: # Ricordatevi sempre di distruggere la finestra!
09: dlg.Destroy()
esempio 10.1 [visualizza esempio completo]
Alla linea 4 viene creata la finestra, i parametri sono: - parent: la finestra genitore, può essere None;
- message: il messaggio da visualizzare sulla barra del titolo;
- defaultDir: la directory di partenza, se non viene specificato la directory di partenza è la directory corrente;
- defaultFile: il nome del file di default (se non specificato è "");
- wildcard: specifica il tipo di file visualizzati. La stringa è nel formato "stringa visualizzata1|filtro1|stringa visualizzata2|filtro2...", i valori sono quindi separati con il carattere "|". La parte "stringa visualizzata" è ciò che viene mostrato all'utente ma non influenza effettivamente il comportamento di wxPython, la parte "filtro" influenza il tipo di file visualizzati, vengono infatti mostrati solo quelli che corrispondono al filtro. Per il filtro è possibile usare il simbolo "*" ad indicare qualsiasi carattere. Nell'esempio l'utente può scegliere se visualizzare solo i file di testo (con estensione .txt) o tutti i file (con qualsiasi estensione). Se il filtro deve contenere più tipi di file questi possono essere separati dal carattere ";". Ricordatevi di non mettere spazi intorno al carattere "|" perché farebbero parte della parte visualizzata e del filtro
- style: gli stili da applicare alla finestra, può essere una combinazione dei seguenti stili (utilizzando l'operatore |):
- wxOPEN: la finestra di dialogo serve per aprire un file
- wxSAVE: serve per salvare un file
- wxHIDE_READONLY: i file in sola lettura vengo nascosti
- wxOVERWRITE_PROMPT: prima di sovrascrivere un file ne viene chiesta conferma (vi consiglio di utilizzarlo sempre quando specificate wxSAVE per evitare spiacevoli sorprese)
- wxMULTIPLE: permette la selezione di più file contemporanemente
- pos: La posizione della finestra.
Alla linea 5 la finestra viene mostrata all'utente e l'esecuzione si blocca fino a quando non viene chiusa, il valore ritornato è wxID_OK se è stato premuto il tasto "OK" o wxID_CANCEL se è stato premuto "Annulla".
Alla linea 7 viene visualizzato il nome del file scelto per ottenere il nome si usano le funzioni GetFilename e GetPath che restituiscono rispettivamente il nome del file senza directory (ad es. "pippo.txt") e il nome del file completo (ad es. "c:\documenti\pippo.txt"). Se invece viene specificato lo stile wxMULTIPLE i file selezionati possono essere più di uno, in questo caso è necessario usare le funzioni GetFilenames e GetPaths che restituiscono una lista di file.
immagine 10.1
wxDirDialog
Quando non è più necessario scegliere un file ma una directory viene usata un altra finestra, gestita dalla classe wxDirDialog.
01: dlg = wxDirDialog(None, "Scegli una directory")
02: if dlg.ShowModal() == wxID_OK:
03: wxMessageBox("La directory è " + dlg.GetPath())
04: dlg.Destroy()
esempio 10.2 [visualizza esempio completo]
Anche l'uso della classe wxDirDialog è molto semplice, i parametri del costruttore sono la finestra genitore, il testo, la directory di partenza, lo stile (inutilizzato, deve essere 0) e la posizione.
Dopo la creazione la finestra viene utilizzata come wxFileDialog e per ottenere la directory selezionata si usa il metodo GetPath (linea 3).
immagine 10.2
Altre finestre di dialogo comuni
wxPython offre altri tipi di finestre che sono meno utilizzate e quindi non verranno trattate in modo esteso ma solo elencate: - wxColourDialog: l'utente può scegliere un colore
- wxSingleChoiceDialog: scelta di un elemento fra quelli contenuti in un elenco
- wxTextEntryDialog: finestra per richiedere un input
- wxFontDialog: scelta di un font fra quelli installati sul computer dell'utente
- wxProgressDialog: mostra una barra che indica il progresso di un'operazione
- wxFindReplaceDialog: finestra per cercare (o sostituire) del testo