Как изменить переменную проекта с помощью Python?

10

Я хотел бы изменить значение пользовательской переменной проекта (может быть отредактировано вручную в Project Settings | Variables) с помощью консоли Python. Я отследил функцию setVariable () в классе QgsExpressionContextScope, но мне не удалось изменить переменную в настройках проекта. Мой код до сих пор:

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

Я думаю, что я теряюсь в различных контекстах выражения ...

Подземье
источник

Ответы:

11

Посмотрите на QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). Вам нужен метод QgsExpressionContextUtils.setProjectVariable, например

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
источник
Как насчет удаления переменной? Я не нашел метод для этого вQgsExpressionContextUtils
ismailsunni
Для этого нет API высокого уровня. Возможно, вы могли бы обойтись без NULLING переменной (установив ее в None), но если нет, вам нужно использовать QgsExpressionContextUtils.setProjectVariables ({}) и сбросить весь лот. Сначала вам нужно проверить QgsExpressionContextUtils.projectScope () и создать dict для всех переменных, которые вы хотите сохранить. Это далеко от идеала - но также будет тривиальным дополнением к API, если вы хотите принять участие в разработке QGIS и отправить через pull-запрос на github ...
ndawson
Спасибо @ndawson, он работает с вашей работой, чтобы сбросить с setProjectVariables(preserved_variables)Я проверил код C ++, я надеюсь, что смогу внести свой вклад в функциональность.
ismailsunni
QgsExpressionContextUtils.removeProjectVariableсуществует сейчас!
letmaik