Come cambiare una variabile di progetto usando Python?


10

Vorrei cambiare il valore di una variabile di progetto definita dall'utente (può essere modificata manualmente in Impostazioni progetto | Variabili) usando la console Python. Ho rintracciato la funzione setVariable () nella classe QgsExpressionContextScope ma non sono riuscito a modificare effettivamente la variabile nelle impostazioni del progetto. Il mio codice finora:

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

Immagino che mi perdo nei diversi contesti di espressione ...

Risposte:


11

Guarda QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). Il metodo necessario è QgsExpressionContextUtils.setProjectVariable, ad es

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')

Che ne dici di cancellare una variabile? Non ho trovato il metodo per farlo inQgsExpressionContextUtils
ismailsunni il

Non ci sono API di alto livello per farlo. Probabilmente potresti cavartela con NULLING (impostandola su None), ma in caso contrario, devi usare QgsExpressionContextUtils.setProjectVariables ({}) e ripristinare l'intero lotto. Dovresti prima controllare QgsExpressionContextUtils.projectScope () e creare un dict di tutte le variabili che vuoi conservare. È tutt'altro che ideale - ma sarebbe anche una banale aggiunta all'API se volessi essere coinvolto nello sviluppo di QGIS e inviare una richiesta pull su github ...
ndawson

Grazie @ndawson, funziona con il tuo lavoro in giro per ripristinare con setProjectVariables(preserved_variables)Ho controllato il codice C ++, spero di poter contribuire per la funzionalità.
Ismailsunni,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.