Los fragmentos de código en esta página necesitan las siguientes adiciones si está fuera de la consola de pyqgis:

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

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 de setValue() y :meth:`value() < qgis.core.QgsSettings.value>`métodos.

    Aquí puede ver un ejemmplo de como se usan estos métodos.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    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)
    

    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.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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)
    

    Como puede ver, el método writeEntry() se utiliza para todos los tipos de datos, pero existen varios métodos para volver a leer el valor de configuración, 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.

    1
    2
    3
    4
    5
    6
    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")