Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

12. Läsa och lagra inställningar

Råd

Kodsnuttarna på den här sidan behöver följande import om du befinner dig utanför pyqgis-konsolen:

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

Många gånger är det användbart för ett plugin att spara vissa variabler så att användaren inte behöver ange eller välja dem igen nästa gång pluginet körs.

Dessa variabler kan sparas och hämtas med hjälp av Qt och QGIS API. För varje variabel bör du välja en nyckel som ska användas för att komma åt variabeln — för användarens favoritfärg kan du använda nyckeln ”favorite_color” eller någon annan meningsfull sträng. Vi rekommenderar att du ger namngivningen av nycklar en viss struktur.

Vi kan skilja mellan flera olika typer av inställningar:

  • globala inställningar — de är knutna till användaren på en viss maskin. QGIS själv lagrar en hel del globala inställningar, till exempel huvudfönstrets storlek eller standardtolerans för snapping. Inställningar hanteras med hjälp av klassen QgsSettings, till exempel genom metoderna setValue() och value().

    Här kan du se ett exempel på hur dessa metoder används.

     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)
    

    Den andra parametern i metoden value() är valfri och anger det standardvärde som returneras om det inte finns något tidigare värde angivet för det passerade inställningsnamnet.

    För en metod att förkonfigurera standardvärdena för de globala inställningarna genom filen qgis_global_settings.ini, se Distribuera QGIS inom en organisation för ytterligare information.

  • projektinställningar — varierar mellan olika projekt och därför är de kopplade till en projektfil. Bakgrundsfärgen på kartduken eller destinationens koordinatreferenssystem (CRS) är exempel på detta — vit bakgrund och WGS84 kan vara lämpligt för ett projekt, medan gul bakgrund och UTM-projektion är bättre för ett annat.

    Ett exempel på användning följer nedan.

     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)
    

    Som du kan se används metoden writeEntry() för många datatyper (heltal, sträng, lista), men det finns flera metoder för att läsa tillbaka inställningsvärdet, och motsvarande måste väljas för varje datatyp.

  • inställningar för kartlager — dessa inställningar är relaterade till en viss instans av ett kartlager med ett projekt. De är inte kopplade till den underliggande datakällan för ett lager, så om du skapar två kartlagerinstanser av en shapefil kommer de inte att dela inställningarna. Inställningarna lagras i projektfilen, så om användaren öppnar projektet igen kommer de lagerrelaterade inställningarna att finnas där igen. Värdet för en given inställning hämtas med metoden customProperty() och kan ställas in med metoden 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")