It appeared that I made it work. It might be not the best way,but it works.
It also might get outdated as new labeling engine being developed.
1. In the __init__ I add:
self.fields = QgsFields()
self.label = QgsLabel(self.fields)
Not sure I need to keep object "QgsLabel" but I do.
Also self.fields are actually not used, this is just requirement
for "QgsLabel"constructor
2. In the function to draw label:
# again, "fields" has nothing inside
fields = QgsFields()
feat = QgsFeature(fields)
# init number of attributes with the same number of fields
# as enum LabelFields in the QgsLabel class
# this is just for convenience and is not very nice
feat.initAttributes(QgsLabel.LabelFieldCount)
# set feature geometry as a point. Here x,y is position of the label
feat.setGeometry(QgsGeometry.fromPoint(QGpsPoint(x,y)))
# now we have two options to set label options: or we use
# label itself or we use feature "feat" It is better to use label itself
# for font, color etc if we draw bunch of labels. Here is how can be done:
# ( example from my dialog)
self.label.labelAttributes().setFamily(self.dlg.label_attributes.family())
self.label.labelAttributes().setBold(self.dlg.label_attributes.bold())
self.label.labelAttributes().setItalic(self.dlg.label_attributes.italic())
self.label.labelAttributes().setUnderline(self.dlg.label_attributes.underline())
self.label.labelAttributes().setStrikeOut(self.dlg.label_attributes.strikeOut())
self.label.labelAttributes().setSize(self.dlg.label_attributes.size(),
core.QgsLabelAttributes.PointUnits)
self.label.labelAttributes().setColor(QtGui.QColor.fromRgba(self.dlg.label_attributes.color().rgba()))
# the rest of the attribute we set using feature "feat"
# note that above call feat.initAttributes(QgsLabel.LabelFieldCount)is
# essential for to allow setting these attributes as below
feat.setAttribute(QgsLabel.Angle,90.)
feat.setAttribute(QgsLabel.Alignment, 'right')
# etc. Noe that now we need to tell QgsLabel where to search for the
attributes.
# Because we created the same number of feature attributes as size of
enum LabelField
# we can tell it this way:
self.label.setLabelField(QgsLabel.Text,QgsLabel.Text)
self.label.setLabelField(QgsLabel.Angle,QgsLabel.Angle)
self.label.setLabelField(QgsLabel.Alignment,QgsLabel.Alignment)
# Note that first and second argument is the same but this is only
# because number of feature attributes was set the same as LabelField size.
# many of the attributes this way remain unset.
# note that you also can specify font, color etc using
self.label.setLabelField()
# finally draw the labels. I used function drawLabels(self, renderContext)
# Just add:
self.label.renderLabel(renderContext, feat, False)
Best Regards,
Mikhail
On 10/14/2013 12:01 PM, Mikhail Tchernychev wrote:
Hi,
Apparently no one is to help me... I found it is not simply possible
to put
labels at where I want on the plugin layer. Apparently no one is using
QGsLabel
anymore, and documentation is missing or obscure...
Qgis keeps crashing on me when I try to add label in python, which I
believe is a bug
anyway.
Regards,
Mikhail
Original post:
Hi,
I am trying to add labels to the plugin layer. What I use in draw()
is:
fields = QgsFields()
fields.append(QgsField('0', QtCore.QVariant.String, 'string', 32))
fields.append(QgsField('8', QtCore.QVariant.Double, 'double', 8))
fields.append(QgsField('9', QtCore.QVariant.Double, 'double', 8))
feat = QgsFeature(fields)
label = QgsLabel(fields)
feat.setAttribute('0','Test Text')
feat.setAttribute('8', -8.66774)
feat.setAttribute('9', 37.08391)
label.renderLabel(renderContext, feat, False)
- QGIS crashes (2.0.1, stock version, Linux)
There is almost no doc on how to add labels to the layer
I am trying to mimic field 'Text' 'XCoordinate' and 'YCoordinate'
with '0', '8' and '9' based on enum LabelField
Apparently also some change in the Api since 1.8, I was
using GridPlugin from 1.8 as example, but something is different now.
Could anyone shed some light on it?
I am actually developing Lat/Lon grid plugin for QGIS, which I think
very much needed.
Thank you
Mikhail
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer