Como alterar uma variável de projeto usando Python?

10

Gostaria de alterar o valor de uma variável de projeto definida pelo usuário (pode ser editada manualmente em Configurações do projeto | Variáveis) usando o console do Python. Eu localizei a função setVariable () na classe QgsExpressionContextScope, mas não consegui alterar a variável nas configurações do projeto. Meu código até agora:

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

Acho que estou me perdendo nos diferentes contextos de expressão ...

underdark
fonte

Respostas:

11

Veja QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). O método necessário é QgsExpressionContextUtils.setProjectVariable, por exemplo

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
fonte
Que tal excluir uma variável? Eu não encontrar o método por ele emQgsExpressionContextUtils
ismailsunni
Não há API de alto nível para fazer isso. Possivelmente, você pode se safar de anular a variável (configurando-a como Nenhuma), mas, se não, precisará usar QgsExpressionContextUtils.setProjectVariables ({}) e redefinir todo o lote. Você primeiro precisa verificar QgsExpressionContextUtils.projectScope () e criar um ditado de todas as variáveis ​​que deseja manter. Está longe de ser ideal -, mas também seria uma adição trivial para a API se você queria se envolver no desenvolvimento QGIS e enviar através de uma solicitação de recebimento no github ...
ndawson
Obrigado @ndawson, ele trabalha com o seu trabalho para redefinir setProjectVariables(preserved_variables). Verifiquei o código C ++, espero poder contribuir para a funcionalidade.
Ismailsunni