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

from qgis.core import (
  QgsProject,
  QgsSettings,
  QgsVectorLayer
)

Instellingen lezen en opslaan

Waarschuwing

Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.

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:

  • 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 the setValue() and value() methods.

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

    def store():
      s = QgsSettings()
      s.setValue("myplugin/mytext", "hello world")
      s.setValue("myplugin/myint",  10)
      s.setValue("myplugin/myreal", 3.14)
    
    def read():
      s = QgsSettings()
      mytext = s.value("myplugin/mytext", "default text")
      myint  = s.value("myplugin/myint", 123)
      myreal = s.value("myplugin/myreal", 2.71)
      nonexistent = s.value("myplugin/nonexistent", None)
      print(mytext)
      print(myint)
      print(myreal)
      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.

  • 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.

    proj = QgsProject.instance()
    
    # store values
    proj.writeEntry("myplugin", "mytext", "hello world")
    proj.writeEntry("myplugin", "myint", 10)
    proj.writeEntry("myplugin", "mydouble", 0.01)
    proj.writeEntry("myplugin", "mybool", True)
    
    # read values (returns a tuple with the value, and a status boolean
    # which communicates whether the value retrieved could be converted to
    # its type, in these cases a string, an integer, a double and a boolean
    # respectively)
    
    mytext, type_conversion_ok = proj.readEntry("myplugin",
                                                "mytext",
                                                "default text")
    myint, type_conversion_ok = proj.readNumEntry("myplugin",
                                                  "myint",
                                                  123)
    mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin",
                                                        "mydouble",
                                                        123)
    mybool, type_conversion_ok = proj.readBoolEntry("myplugin",
                                                    "mybool",
                                                    123)
    

    Zoals u kunt zien wordt de methode writeEntry() gebruikt voor alle gegevenstypen, 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().

    vlayer = QgsVectorLayer()
    # save a value
    vlayer.setCustomProperty("mytext", "hello world")
    
    # read the value again (returning "default text" if not found)
    mytext = vlayer.customProperty("mytext", "default text")