下面是使用新的QGIS 3 API从头开始设置基于规则的标签的一些帮助
#Configure label settings
settings = QgsPalLayerSettings()
settings.fieldName = 'myFieldName'
textFormat = QgsTextFormat()
textFormat.setSize(10)
settings.setFormat(textFormat)
#create and append a new rule
root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
rule = QgsRuleBasedLabeling.Rule(settings)
rule.setDescription(fieldName)
rule.setFilterExpression('myExpression')
root.appendChild(rule)
#Apply label configuration
rules = QgsRuleBasedLabeling(root)
myLayer.setLabeling(rules)
myLayer.triggerRepaint()
不幸的是,我找不到如何遍历现有规则的方法,可用于矢量层的labeling()方法返回QgsAbstractVectorLayerLabeling类的对象,但似乎没有办法从此类中获取根规则(QgsRuleBasedLabeling),这是唯一的可能性我发现是使用提供程序ID直接获得pal设置,但是我无法访问规则树。有人知道吗?
编辑
现在已修复,labeling()函数返回QgsRuleBasedLabeling():https : //github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606