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 metodernasetValue()
ochvalue()
.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 metodensetCustomProperty()
.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")