[QGIS-it-user] Modificare la legenda di un layer categorizzato
Giulio Fattori
giulio.fattori a tin.it
Mar 14 Giu 2022 07:40:26 PDT
Buongiorno,
Ho realizzato questo script da console per modificare la legenda di un
layer categorizzato.
Ha bisogno del campo di tematizzazione, di un altro campo da cui trarre
la nuova legenda e opzionalmente un altro testo.
Funziona perfettamente ma solo una volta dopo la quale se rilanciato
manda QGIS in crash.
Esiste una soluzione ?
Grazie
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20220614/7c3c3467/attachment.htm>
-------------- parte successiva --------------
lyr = iface.activeLayer()
#inserire campo attuale classificazione: "SIGLA"
field = "SIGLA"
#recupero le nuove etichette legenda da: "nomePDF"
new_label =[]
for feature in lyr.getFeatures():
new_label.append(feature["nomePDF"])
#tutti gli altri valori
new_label.append('')
print(new_label)
#eventuale stringa aggiuntiva
alt_value = ''
#creo un nuovo vettore per le nuove etichette
new_categories = []
#recupero le categorie esistenti
categories = lyr.renderer().categories()
new_renderer = QgsCategorizedSymbolRenderer()
#ciclo sulle categorie
for i, category in enumerate(categories):
#recupero il simbolo esistente
new_sym = category.symbol()
#creo la nuova categoria senza cambiare simbolo ma modificando etichetta
#print(category.value(), new_sym, str(new_label[i]) + alt_value)
#aggiungo la categoria alla lista
new_categories.append(QgsRendererCategory(category.value(), new_sym, str(new_label[i])+alt_value))
#applico la tematizzazione
new_renderer = QgsCategorizedSymbolRenderer(field, new_categories)
lyr.setRenderer(new_renderer)
lyr.triggerRepaint()
Maggiori informazioni sulla lista
QGIS-it-user