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.