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 ...

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.