The code snippets on this page need the following imports if you’re outside the pyqgis console:
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
12. Leggere E Memorizzare Impostazioni
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.
We can differentiate between several types of settings:
global settings — they are bound to the user at a particular machine. QGIS itself stores a lot of global settings, for example, main window size or default snapping tolerance. Settings are handled using the
QgsSettings
class, through for example thesetValue()
andvalue()
methods.Here you can see an example of how these methods are used.
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)
The second parameter of the
value()
method is optional and specifies the default value that is returned if there is no previous value set for the passed setting name.For a method to pre-configure the default values of the global settings through the
global_settings.ini
file, see Distribuzione di QGIS all’interno di un’organizzazione for further details.
project settings — vary between different projects and therefore they are connected with a project file. Map canvas background color or destination coordinate reference system (CRS) are examples — white background and WGS84 might be suitable for one project, while yellow background and UTM projection are better for another one.
An example of usage follows.
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)
As you can see, the
writeEntry()
method is used for many data types (integer, string, list), but several methods exist for reading the setting value back, and the corresponding one has to be selected for each data type.
map layer settings — these settings are related to a particular instance of a map layer with a project. They are not connected with underlying data source of a layer, so if you create two map layer instances of one shapefile, they will not share the settings. The settings are stored inside the project file, so if the user opens the project again, the layer-related settings will be there again. The value for a given setting is retrieved using the
customProperty()
method, and can be set using thesetCustomProperty()
one.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")