新しい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