Bagaimana cara mengubah variabel proyek menggunakan Python?

10

Saya ingin mengubah nilai variabel proyek yang ditentukan pengguna (dapat diedit secara manual di Pengaturan Proyek | Variabel) menggunakan konsol Python. Saya melacak fungsi setVariable () di kelas QgsExpressionContextScope tetapi belum berhasil benar-benar mengubah variabel dalam pengaturan proyek. Kode saya sejauh ini:

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

Saya kira saya tersesat dalam konteks ekspresi yang berbeda ...

underdark
sumber

Jawaban:

11

Lihatlah QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ). Metode yang Anda butuhkan adalah QgsExpressionContextUtils.setProjectVariable, mis

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')
ndawson
sumber
Bagaimana dengan menghapus variabel? Saya tidak menemukan metode untuk ituQgsExpressionContextUtils
ismailsunni
Tidak ada API tingkat tinggi untuk melakukan ini. Mungkin Anda bisa menghilangkan variabel PENUH (mengaturnya ke Tidak Ada), tetapi jika tidak, Anda perlu menggunakan QgsExpressionContextUtils.setProjectVariables ({}) dan mengatur ulang seluruh lot. Pertama-tama Anda harus memeriksa QgsExpressionContextUtils.projectScope () dan membuat dict dari semua variabel yang ingin Anda pertahankan. Ini jauh dari ideal - tetapi juga akan menjadi tambahan sepele untuk API jika Anda ingin terlibat dalam pengembangan QGIS dan mengirim melalui permintaan tarik di github ...
ndawson
Terima kasih @ndawson, ini bekerja dengan pekerjaan Anda di sekitar untuk mengatur ulang dengan setProjectVariables(preserved_variables)Saya telah memeriksa kode C ++, saya harap saya dapat berkontribusi untuk fungsionalitasnya.
ismailsunni