Jak zmienić zmienną projektu za pomocą Pythona?

10

Chciałbym zmienić wartość zmiennej projektu zdefiniowanej przez użytkownika (można ją ręcznie edytować w Ustawieniach projektu | Zmienne) za pomocą konsoli Python. Wyśledziłem funkcję setVariable () w klasie QgsExpressionContextScope, ale nie udało mi się zmienić zmiennej w ustawieniach projektu. Mój kod do tej pory:

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

Chyba gubię się w różnych kontekstach ekspresji ...

podmrok
źródło

Odpowiedzi:

11

Spójrz na QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). Potrzebną metodą jest QgsExpressionContextUtils.setProjectVariable, np

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
źródło
Co powiesz na usunięcie zmiennej? Nie znalazłem metody na to wQgsExpressionContextUtils
ismailsunni 24.07.17
Nie ma do tego celu interfejsu API wysokiego poziomu. Być może uda Ci się uniknąć NULLING zmiennej (ustawiając ją na None), ale jeśli nie, musisz użyć QgsExpressionContextUtils.setProjectVariables ({}) i zresetować całą partię. Najpierw musisz sprawdzić QgsExpressionContextUtils.projectScope () i utworzyć słownik wszystkich zmiennych, które chcesz zachować. Jest to dalekie od ideału - ale byłoby również trywialnym dodatkiem do API, jeśli chcesz zaangażować się w rozwój QGIS i wysłać żądanie ściągnięcia na github ...
ndawson
Dzięki @ndawson, pracuje z tobą przy resetowaniu setProjectVariables(preserved_variables)Sprawdziłem kod C ++, mam nadzieję, że mogę przyczynić się do funkcjonalności.
ismailsunni
QgsExpressionContextUtils.removeProjectVariableistnieje teraz!
letmaik 20.01.2018