[QGIS-it-user] Modificare la legenda di un layer categorizzato

Giulio Fattori giulio.fattori a tin.it
Mar 14 Giu 2022 04:23:49 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/a14e47d1/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