Comment changer une variable de projet en utilisant Python?

10

Je souhaite modifier la valeur d'une variable de projet définie par l'utilisateur (peut être modifiée manuellement dans Paramètres du projet | Variables) à l'aide de la console Python. J'ai retrouvé la fonction setVariable () dans la classe QgsExpressionContextScope mais je n'ai pas réussi à changer la variable dans les paramètres du projet. Mon code jusqu'à présent:

iface.mapCanvas().mapSettings().expressionContext().scope(0).setVariable('myvar',1)

Je suppose que je me perds dans les différents contextes d'expression ...

obscur
la source

Réponses:

11

Regardez QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). La méthode dont vous avez besoin est QgsExpressionContextUtils.setProjectVariable, par exemple

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
la source
Qu'en est-il de la suppression d'une variable? Je n'ai pas trouvé de méthode pour cela dansQgsExpressionContextUtils
ismailsunni
Il n'y a pas d'API de haut niveau pour ce faire. Il est possible que vous puissiez vous en sortir avec NULLING la variable (en la définissant sur None), mais sinon, vous devez utiliser QgsExpressionContextUtils.setProjectVariables ({}) et réinitialiser l'ensemble du lot. Vous devez d'abord vérifier QgsExpressionContextUtils.projectScope () et créer un dict de toutes les variables que vous souhaitez conserver. C'est loin d'être idéal - mais ce serait aussi un ajout trivial à l'API si vous vouliez vous impliquer dans le développement de QGIS et envoyer une demande d'extraction sur github ...
ndawson
Merci @ndawson, cela fonctionne avec votre travail pour réinitialiser avec setProjectVariables(preserved_variables)J'ai vérifié le code C ++, j'espère pouvoir contribuer pour la fonctionnalité.
ismailsunni