Как изменить переменную проекта с помощью 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')

Как насчет удаления переменной? Я не нашел метод для этого вQgsExpressionContextUtils
ismailsunni

Для этого нет API высокого уровня. Возможно, вы могли бы обойтись без NULLING переменной (установив ее в None), но если нет, вам нужно использовать QgsExpressionContextUtils.setProjectVariables ({}) и сбросить весь лот. Сначала вам нужно проверить QgsExpressionContextUtils.projectScope () и создать dict для всех переменных, которые вы хотите сохранить. Это далеко от идеала - но также будет тривиальным дополнением к API, если вы хотите принять участие в разработке QGIS и отправить через pull-запрос на github ...
ndawson

Спасибо @ndawson, он работает с вашей работой, чтобы сбросить с setProjectVariables(preserved_variables)Я проверил код C ++, я надеюсь, что смогу внести свой вклад в функциональность.
ismailsunni

QgsExpressionContextUtils.removeProjectVariableсуществует сейчас!
letmaik
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.