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 ...

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')

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.