Ошибка отображения, когда метка содержит выражение - PullRequest
0 голосов
/ 04 августа 2020

У меня есть эта функция, которая должна изменить метку многоугольника (код ниже), где «nom_com» и «statutpro» - поля в слое.

def ETIQUETAGE(self):
    layer = self.COUCHE_DEPARTEMENT_SELECTIONNEE() #return a vector layer
    deco = QgsPalLayerSettings()
    deco.enabled = True
    isExpression = True
    if self.ChoixEtiquetage.currentText() == "COMMUNE":
        deco.fieldName = '\'nom :\' +"nom_com"'
    if self.ChoixEtiquetage.currentText() == "COMMUNE ET STATUT PROSPECTION":
        deco.fieldName = '"nom_com" + \'\\n\' +"statutpro"' 
    labeler = QgsVectorLayerSimpleLabeling(deco)
    layer.setLabeling(labeler)
    layer.setLabelsEnabled(True)
    layer.triggerRepaint()

Когда я запускаю ее, все в порядке ( у меня нет ошибок) проблема в дисплее. Функция изменяет метку charateristi c в окне свойств, но отображение не отображается, пока я не нажму aply в окне свойств.

Когда я помещаю только один аргумент, отображение работает отлично. например,

deco.fieldName = "nom_com"

Есть ли особый синтаксис, когда это выражение?

1 Ответ

0 голосов
/ 06 августа 2020

Я просто вижу, где была моя ошибка, это была синтаксическая ошибка. Если метка основана на выражении, мы должны поставить

deco.isExpression

, чтобы плагин отображал что-то на холсте

def ETIQUETAGE(self):
layer = self.COUCHE_DEPARTEMENT_SELECTIONNEE() #return a vector layer
deco = QgsPalLayerSettings()
deco.enabled = True
deco.isExpression = True
if self.ChoixEtiquetage.currentText() == "COMMUNE":
    deco.fieldName = "concat('nom : ', nom_com)"
if self.ChoixEtiquetage.currentText() == "COMMUNE ET STATUT PROSPECTION":
    deco.fieldName = "concat('nom : ', nom_com, '\\n', 'Statut prospection : ', statutpro)"' 
labeler = QgsVectorLayerSimpleLabeling(deco)
layer.setLabeling(labeler)
layer.setLabelsEnabled(True)
layer.triggerRepaint()

надеюсь, что это поможет людям

...