¿Cómo cambiar una variable de proyecto usando Python?

10

Me gustaría cambiar el valor de una variable de proyecto definida por el usuario (se puede editar manualmente en Configuración del proyecto | Variables) utilizando la consola de Python. Localicé a la función setVariable () en la clase QgsExpressionContextScope , pero no han tenido éxito en cambiar realmente la variable en la configuración del proyecto. Mi código hasta ahora:

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

Supongo que me estoy perdiendo en los diferentes contextos de expresión ...

bajo oscuro
fuente

Respuestas:

11

Mire QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). El método que necesita es QgsExpressionContextUtils.setProjectVariable, p. Ej.

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
fuente
¿Qué pasa con la eliminación de una variable? No encontré el método para elloQgsExpressionContextUtils
ismailsunni
No hay API de alto nivel para hacer esto. Posiblemente podría salirse con la anulación de la variable (estableciéndola en Ninguno), pero si no, debe usar QgsExpressionContextUtils.setProjectVariables ({}) y restablecer todo el lote. Primero debe verificar QgsExpressionContextUtils.projectScope () y crear un dict de todas las variables que desea mantener. Está lejos de ser ideal, pero también sería una adición trivial a la API si quisieras involucrarte en el desarrollo de QGIS y enviar una solicitud de extracción en github ...
ndawson
Gracias @ndawson, funciona con su trabajo para restablecer con setProjectVariables(preserved_variables)He comprobado el código C ++, espero poder contribuir con la funcionalidad.
ismailsunni