I am writing a python script to label features (lines). However I can't figure out:
how to get the script to turn on the buffer
how to get the script to apply the changes. When I currently run it, it changes everything in the properties (except the buffer) but I still have to hit ok before QGIS applies it to the map.
.
layer = iface.activeLayer()
layer.setCustomProperty("labeling/fieldName", "Length" )
layer.setCustomProperty("labeling/placement", QgsPalLayerSettings.Horizontal)
layer.setCustomProperty("labeling/predefinedPointPosition", QgsPalLayerSettings.BottomRight)
layer.setCustomProperty("labeling/fontSize","10" )
layer.setCustomProperty("labeling/buffer",QgsPalLayerSettings.BufferDraw)
layer.setCustomProperty("labeling/enabled","true" )
layer.triggerRepaint()
I have had a look at one similar question but I cannot seem to figure it out: How to label line features using python code?
Once I get this to work I want to transform it into a batch-script by adding some lines like:
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
-
1I only knew I could upvote but didn't see the little "accept" button. Thanks!Hannes Ledegen– Hannes Ledegen2017年08月28日 07:57:12 +00:00Commented Aug 28, 2017 at 7:57
1 Answer 1
To turn on the buffer, you can use:
layer.setCustomProperty("labeling/bufferDraw", True)
You can also set various properties as described in the QgsPalLayerSettings class such as the size:
layer.setCustomProperty("labeling/bufferSize", "5")
So if you would like to apply this to all your loaded layers, you could use something like:
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
layer.setCustomProperty("labeling/fieldName", "Length" )
layer.setCustomProperty("labeling/placement", QgsPalLayerSettings.Horizontal)
layer.setCustomProperty("labeling/predefinedPointPosition", QgsPalLayerSettings.BottomRight)
layer.setCustomProperty("labeling/fontSize","10" )
layer.setCustomProperty("labeling/bufferDraw", True)
layer.setCustomProperty("labeling/enabled","true" )
layer.triggerRepaint()