Wie ändere ich eine Projektvariable mit Python?

10

Ich möchte den Wert einer benutzerdefinierten Projektvariablen (kann manuell in Projekteinstellungen | Variablen bearbeitet werden) über die Python-Konsole ändern. Ich habe die Funktion setVariable () in der Klasse QgsExpressionContextScope aufgespürt, aber es ist mir nicht gelungen, die Variable in den Projekteinstellungen tatsächlich zu ändern. Mein Code bisher:

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

Ich glaube, ich verliere mich in den verschiedenen Ausdruckskontexten ...

Unterdunkel
quelle

Antworten:

11

Schauen Sie sich QgsExpressionContextUtils an ( https://qgis.org/api/classQgsExpressionContextUtils.html ). Die Methode, die Sie benötigen, ist QgsExpressionContextUtils.setProjectVariable, z

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
Ndawson
quelle
Was ist mit dem Löschen einer Variablen? Ich habe keine Methode dafür gefunden inQgsExpressionContextUtils
ismailsunni
Es gibt keine High-Level-API, um dies zu tun. Möglicherweise könnten Sie mit NULLING der Variablen davonkommen (auf None setzen), aber wenn nicht, müssen Sie QgsExpressionContextUtils.setProjectVariables ({}) verwenden und das gesamte Los zurücksetzen. Sie müssen zuerst QgsExpressionContextUtils.projectScope () überprüfen und ein Diktat aller Variablen erstellen, die Sie behalten möchten. Es ist alles andere als ideal - aber es wäre auch eine triviale Ergänzung der API, wenn Sie sich an der QGIS-Entwicklung beteiligen und eine Pull-Anfrage auf Github senden möchten ...
ndawson
Vielen Dank an @ndawson, es funktioniert mit Ihrer Arbeit, um zurückzusetzen, nachdem setProjectVariables(preserved_variables)ich den C ++ - Code überprüft habe. Ich hoffe, ich kann einen Beitrag zur Funktionalität leisten.
ismailsunni