12. Lecture et sauvegarde de configurations
Indication
Les extraits de code sur cette page nécessitent les importations suivantes si vous êtes en dehors de la console pyqgis :
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
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éthodessetValue()
etvalue()
.Ci-après un exemple d’utilisation de ces méthodes.
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)
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.
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)
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éthodesetCustomProperty()
.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")