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

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

¿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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.