[GIS] Setting QgsExpression for QgsPalLayerSettings in QGIS

pyqgis

How do you apply a QgsExpression to a Label ?

I can do it in QGIS with this simple expression
concat('N:' ,round(Value,0),'\n','Yield:' ,round(Value 2,0))

N: 65

Yield: 40

How do I do it in PyQGIS ? I see a getLabelExpression but no setLabelExpression

This works but I want but only for the field name

 crap = QgsVectorLayer("D:/data.shp", "data", "ogr")
 QgsMapLayerRegistry.instance().addMapLayer(crap)
 palyr = QgsPalLayerSettings()
 palyr.readFromLayer(crap)
 palyr.enabled = True
 palyr.fieldName = 'Name'
 palyr.placement= QgsPalLayerSettings.OverPoint
 palyr.setDataDefinedProperty(QgsPalLayerSettings.Size,True,True,'8','')
 palyr.writeToLayer(crap)

Best Answer

Place the expression in palyr.fieldName, then set palyr.isExpression to True:

palyr = QgsPalLayerSettings()
palyr.readFromLayer(crap)
palyr.enabled = True
palyr.fieldName = "concat('N:' ,round(Value,0),'\\n','Yield:' ,round(Value 2,0))"
palyr.isExpression = True
palyr.placement= QgsPalLayerSettings.OverPoint
Related Question