12. Leggere e Memorizzare Impostazioni
Suggerimento
I frammenti di codice di questa pagina necessitano delle seguenti importazioni se sei è al di fuori della console pyqgis:
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
Molte volte è utile per un plugin salvare alcune variabili in modo tale che l’utente non debba inserirle o selezionarle di nuovo la volta successiva che il plugin è eseguito.
Queste variabili possono essere salvate e recuperate con l’aiuto delle API di Qt e QGIS. Per ogni variabile, dovresti scegliere una chiave che sarà usata per accedere alla variabile — per il colore preferito dell’utente potresti usare la chiave «favourite_color» o una qualunque altra stringa significativa. È raccomandabile dare una qualche struttura alla denominazione delle chiavi.
Possiamo distinguere tra diversi tipi di impostazioni:
impostazioni globali — sono legate all’utente di una particolare macchina. QGIS stesso memorizza molte impostazioni globali, ad esempio la dimensione della finestra principale o la tolleranza di aggancio predefinita. Le impostazioni sono gestite dalla classe
QgsSettings
, ad esempio attraverso i metodisetValue()
evalue()
.Qui puoi vedere un esempio di utilizzo di questi metodi.
1def store(): 2 s = QgsSettings() 3 s.setValue("myplugin/mytext", "hello world") 4 s.setValue("myplugin/myint", 10) 5 s.setValue("myplugin/myreal", 3.14) 6 7def read(): 8 s = QgsSettings() 9 mytext = s.value("myplugin/mytext", "default text") 10 myint = s.value("myplugin/myint", 123) 11 myreal = s.value("myplugin/myreal", 2.71) 12 nonexistent = s.value("myplugin/nonexistent", None) 13 print(mytext) 14 print(myint) 15 print(myreal) 16 print(nonexistent)
Il secondo parametro del metodo
value()
è opzionale e specifica il valore predefinito che viene restituito se non esiste un valore precedente per il nome dell’impostazione fornita.Per un metodo di preconfigurazione dei valori predefiniti delle impostazioni globali attraverso il file
global_settings.ini
, vedi Distribuzione di QGIS all’interno di un’organizzazione per ulteriori dettagli.
Impostazioni di progetto — variano tra i diversi progetti e quindi sono collegate a un file di progetto. Il colore dello sfondo della area mappa o il sistema di riferimento delle coordinate (SR) di destinazione ne sono un esempio — lo sfondo bianco e il WGS84 potrebbero essere adatti a un progetto, mentre lo sfondo giallo e la proiezione UTM sono migliori per un altro.
Segue un esempio di utilizzo.
1proj = QgsProject.instance() 2 3# store values 4proj.writeEntry("myplugin", "mytext", "hello world") 5proj.writeEntry("myplugin", "myint", 10) 6proj.writeEntryDouble("myplugin", "mydouble", 0.01) 7proj.writeEntryBool("myplugin", "mybool", True) 8 9# read values (returns a tuple with the value, and a status boolean 10# which communicates whether the value retrieved could be converted to 11# its type, in these cases a string, an integer, a double and a boolean 12# respectively) 13 14mytext, type_conversion_ok = proj.readEntry("myplugin", 15 "mytext", 16 "default text") 17myint, type_conversion_ok = proj.readNumEntry("myplugin", 18 "myint", 19 123) 20mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin", 21 "mydouble", 22 123) 23mybool, type_conversion_ok = proj.readBoolEntry("myplugin", 24 "mybool", 25 123)
Come puoi vedere, il metodo
writeEntry()
viene utilizzato per molti tipi di dati (interi, stringhe, elenchi), ma esistono diversi metodi per leggere il valore dell’impostazione e per ogni tipo di dati deve essere selezionato quello corrispondente.
impostazioni layer mappa — queste impostazioni sono relative a una particolare istanza di un layer mappa con un progetto. Sono non collegate alla sorgente dati sottostante di un layer, quindi se crei due istanze di layer di mappa di uno shapefile, non condivideranno le impostazioni. Le impostazioni sono memorizzate all’interno del file di progetto, quindi se l’utente apre nuovamente il progetto, le impostazioni relative al layer saranno di nuovo presenti. Il valore di una determinata impostazione viene recuperato con il metodo
customProperty()
e può essere impostato con il metodosetCustomProperty()
.1vlayer = QgsVectorLayer() 2# save a value 3vlayer.setCustomProperty("mytext", "hello world") 4 5# read the value again (returning "default text" if not found) 6mytext = vlayer.customProperty("mytext", "default text")