12. Instellingen lezen en opslaan

Hint

De codesnippers op deze pagina hebben de volgende import nodig als u buiten de console van PyQGIS bent:

1from qgis.core import (
2  QgsProject,
3  QgsSettings,
4  QgsVectorLayer
5)

Vaak is het voor een plug-in nuttig om enkele variabelen op te slaan zodat de gebruiker ze niet opnieuw hoeft in te voeren of te selecteren als de plug-in een volgende keer wordt uitgevoerd.

Deze variabelen kunnen worden opgeslagen en weer worden opgehaald met de hulp van Qt en de API van QGIS. Voor elke variabele zou u een sleutel moeten kiezen die kan worden gebruikt om toegang te verkrijgen tot de variabele — voor de favoriete kleur van de gebruiker zou u de sleutel “favourite_color” kunnen gebruiken of elke andere tekenreeks met betekenis. Het wordt aanbevolen enige structuur aan te brengen in het benoemen van sleutels.

We kunnen onderscheid maken tussen de verschillende typen instellingen:

  • globale instellingen — zij zijn gebonden aan de gebruiker van een bepaalde machine. QGIS slaat zelf heel veel globale instellingen op, bijvoorbeeld, grootte van het hoofdvenster of standaard tolerantie voor snappen. Instellingen worden afgehandeld door de klasse QgsSettings class, door bijvoorbeeld de methoden setValue() en value().

    Hier ziet u een voorbeeld van hoe deze methoden worden gebruikt.

     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)
    

    De tweede parameter van de methode value() is optioneel en specificeert de standaard waarde als er geen eerdere waarde is ingesteld voor de doorgegeven naam van de instelling.

    Voor een methode om de standaardwaarden voor de globale instellingen vooraf te configureren via het bestand global_settings.ini, bekijk QGIS uitrollen in een organisatie voor meer details.

  • projectinstellingen — variëren tussen de verschillende projecten en daarom zijn ze gebonden aan een projectbestand. De kleur van de achtergrond van het kaartvenster of het doel coördinaten referentiesysteem (CRS) zijn daar voorbeelden van — een witte achtergrond en WGS84 zouden misschien geschikt zijn voor het ene project, terwijl een gele achtergrond en de projectie UTM beter geschikt zijn voor een ander.

    Een voorbeeld van het gebruik volgt nog.

     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)
    

    Zoals u kunt zien wordt de methode writeEntry() gebruikt voor veel gegevenstypen (integer, string, list), maar er bestaan verscheidene methoden om de waarde van de instelling terug in te lezen, en de corresponderende moet worden geselecteerd voor elk gegevenstype.

  • instellingen voor kaartlagen — deze instellingen zijn gerelateerd aan een bepaalde instance van een kaartlaag in een project. Zij zijn niet verbonden met de onderliggende gegevensbron van een laag, dus als u twee instances voor kaartlagen maakt uit één shapefile, zullen zij de instellingen niet delen. De instellingen worden opgeslagen in het projectbestand, dus als de gebruiker het project opnieuw opent, zijn de aan de laag gerelateerde instellingen weer aanwezig. De waarde voor een opgegegevn instelling wordt opgehaald met behulp van de methode customProperty(), en kan worden ingesteld met behulp van de methode setCustomProperty().

    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")