12. Configuración de lectura y almacenamiento

Consejo

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)

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 de setValue() 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étodo setCustomProperty() 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")