сигнал dataProvider dataChange работает только один раз - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь обновить таблицу, когда объект добавляется в мой слой, я пытаюсь использовать сигнал dataChanged от dataProvider этого слоя.Я могу обновить таблицу один раз, однако после этого сигнал не срабатывает.Я создал простой пример кода Python для проверки проблемы:

qgis_ltr_dir = "C:/Program Files/QGIS 2.18/apps/qgis-ltr"

import sys
from qgis.gui import *
from qgis.core import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *

def func():
    print 'Print' 

app = QApplication(sys.argv)

QgsApplication.setPrefixPath(qgis_ltr_dir, True)
QgsApplication.initQgis()

vector_layer = QgsVectorLayer("/shapefiles/my_shapes.shp", "vector_layer", "ogr")
print vector_layer.isValid()

QgsMapLayerRegistry.instance().addMapLayer(vector_layer)

#vector_layer.featureAdded.connect(func)
vector_layer.dataProvider().dataChanged.connect(func)

print 'Before First Add'
new_feat = QgsFeature(vector_layer.fields())
vector_layer.dataProvider().addFeatures([new_feat])

print 'Before Second Add'
new_feat2 = QgsFeature(vector_layer.fields())
vector_layer.dataProvider().addFeatures([new_feat2])

Вывод кода:

True
Before First Add
Print
Before Second Add

«True» означает, что слой был загружен правильно, «Print 'должен быть напечатан дважды, но в этом случае был напечатан один раз.

Я уже попробовал функцию, добавленную из QgsVectorLayer, но сигнал вообще не излучается.

Ссылка на документацию по сигналу: https://qgis.org/pyqgis/master/core/QgsDataProvider.html#qgis.core.QgsDataProvider.dataChanged

...