Los fragmentos de código en esta página necesitan las siguientes adiciones si está fuera de la consola de pyqgis:
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
12. Configuración de lectura y almacenamiento
Muchas veces es útil para un complemento guardar algunas variables para que el usuario no tenga que introducir o seleccionar de nuevo la próxima vez que el complemento se ejecute.
Estas variables se pueden guardar y recuperar con ayuda de Qt y QGIS API. Para cada variable, se debe escoger una clave que será utilizada para acceder a la variable — para el color favorito del usuario podría utilizarse la clave «favourite_color» o cualquier otra cadena que tenga sentido. Es recomendable dar un poco de estructura al nombrar las claves.
Podemos diferenciar entre varios tipos de configuraciones:
global settings — están vinculados al usuario en una máquina en particular. QGIS almacena muchas configuraciones globales, por ejemplo, el tamaño de la ventana principal o la tolerancia de ajuste predeterminada. La configuración se maneja usando la clase
QgsSettings
, por ejemplo, a través desetValue()
y :meth:`value() < qgis.core.QgsSettings.value>`métodos.Aquí puede ver un ejemmplo de como se usan estos métodos.
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)
El segundo parámetro del método
value()
es opcional y especifica el valor predeterminado que se devuelve si no hay un valor anterior establecido para el nombre de configuración pasado.Para obtener un método para preconfigurar los valores predeterminados de la configuración global a través del archivo
global_settings.ini
, consulte :ref:deploying_organization` para obtener más detalles.
project settings — varían entre diferentes proyectos y, por lo tanto, están conectados con un archivo de proyecto. El color de fondo del lienzo del mapa o el sistema de referencia de coordenadas de destino (CRS) son ejemplos: el fondo blanco y WGS84 pueden ser adecuados para un proyecto, mientras que el fondo amarillo y la proyección UTM son mejores para otro.
A continuación se muestra un ejemplo de uso.
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)
Como puede ver, el método
writeEntry()
es usado para muchos tipos de datos (entero, cadena, lista), pero existen varios métodos para volver a leer el valor de ajuste, y se debe seleccionar el correspondiente para cada tipo de datos.
map layer settings — esta configuración está relacionada con una instancia particular de una capa de mapa con un proyecto. No están conectados con la fuente de datos subyacente de una capa, por lo que si crea dos instancias de capa de mapa de un archivo de forma, no compartirán la configuración. La configuración se almacena dentro del archivo del proyecto, por lo que si el usuario abre el proyecto nuevamente, la configuración relacionada con la capa volverá a estar allí. El valor para una configuración dada se recupera usando el método
customProperty()
, y se puede establecer usando el métodosetCustomProperty()
uno.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")