Les extraits de code sur cette page nécessitent les importations suivantes si vous êtes en dehors de la console pyqgis :

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

12. Lecture et sauvegarde de configurations

Il est souvent utile pour une extension de sauvegarder des variables pour éviter à l’utilisateur de saisir à nouveau leur valeur ou de faire une nouvelle sélection à chaque lancement de l’extension.

Ces variables peuvent être sauvegardées et récupérées grâce à Qt et à l’API QGIS. Pour chaque variable, vous devez fournir une clé qui sera utilisée pour y accéder — pour la couleur préférée de l’utilisateur, vous pourriez utiliser la clé « couleur_favorite » ou toute autre chaîne de caractères explicite. Nous vous recommandons d’utiliser une convention pour nommer les clés.

Nous pouvons identifier différents types de paramètres :

  • réglages globaux — ils sont liés à l’utilisateur sur une machine particulière. QGIS lui-même stocke de nombreux paramètres globaux, par exemple, la taille de la fenêtre principale ou la tolérance d’accrochage par défaut. Les paramètres sont gérés par la classe QgsSettings, par exemple par les méthodes setValue() et value().

    Ci-après un exemple d’utilisation de ces méthodes.

     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)
    

    Le second paramètre de la méthode value() est facultatif et spécifie la valeur par défaut qui est retournée s’il n’y a pas de valeur précédente définie pour le nom du paramétre passé.

    Pour une méthode permettant de pré-configurer les valeurs par défaut des paramètres globaux via le fichier global_settings.ini, voir Déployer QGIS au sein de son organisation pour plus de détails.

  • Les paramètres du projet — varient selon les différents projets et sont donc liés à un fichier de projet. La couleur de fond du canevas de la carte ou le système de référence des coordonnées de destination (CRS) en sont des exemples — le fond blanc et le WGS84 peuvent convenir à un projet, tandis que le fond jaune et la projection UTM conviennent mieux à un autre.

    Ci-après un exemple d’utilisation.

     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.writeEntryDouble("myplugin", "mydouble", 0.01)
    proj.writeEntryBool("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)
    

    Comme vous pouvez le constater, la méthode writeEntry() est utilisée pour de nombreux types de données (entier, chaîne de caractères, liste), mais plusieurs méthodes existent pour relire la valeur de paramétrage, et il faut choisir la méthode correspondante pour chaque type de données.

  • paramètres de couche cartographique — Ces paramètres sont liés à une instance particulière d’une couche cartographique dans un projet. Ils ne sont pas liés à la source de données sous-jacente d’une couche, donc si vous créez deux instances de couche cartographique d’un shapefile, elles ne partageront pas les paramètres. Les paramètres sont stockés dans le fichier de projet, donc si l’utilisateur ouvre à nouveau le projet, les paramètres liés à la couche seront à nouveau là. La valeur d’un paramètre donné est récupérée à l’aide de la méthode customProperty(), et peut être définie à l’aide de la méthode setCustomProperty().

    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")