4

Using code I found at Go through items in a composer legend (QGIS 2.6) I can access the the layers in my legend fine. However, I have layers that are styled by category and I can't figure out how to change the category labels. I just want to replace the underscores in the category labels with a space.

After looking through the API I think I may be able to use the rendererV2 class. The code below is giving strange results. the first set of print commands return 'foo', but the second set return the original labels and these are also printed on the output pdf.

Is there something I'm missing with the renderer? or, is there a better way to achieve this task?

I'm using QGIS 2.18.7 on windows 8

    for legendLyr in iface.mapCanvas().layers():
        if legendLyr.name() != "os1250_line" and legendLyr.name() != "os1250_text":
            renderer = legendLyr.rendererV2()
            if renderer.type() == "categorizedSymbol":
                myRenderer = renderer.clone()
                for cat in myRenderer.categories():
                    cat.setLabel("foo")
                    print(cat.label())
                legendLyr.setRendererV2(myRenderer)
                for cat in legendLyr.rendererV2().categories():
                    print (cat.label())
                legendLyr.triggerRepaint()

1 Answer 1

6

You need use updateCategoryLabel() method for update the label.

Example Code:

for legendLyr in iface.mapCanvas().layers():
if legendLyr.name() != "os1250_line" and legendLyr.name() != "os1250_text":
    renderer = legendLyr.rendererV2()
    if renderer.type() == "categorizedSymbol":
        myRenderer = renderer.clone()
        idx=0
        for cat in myRenderer.categories():
            myRenderer.updateCategoryLabel (idx,"foo")
            idx+=1      
        legendLyr.setRendererV2(myRenderer)
        legendLyr.triggerRepaint()

And the result is:

enter image description here

Tested QGIS 2.18.13 and W10

Not the answer you're looking for? Browse other questions tagged or ask your own question.