У меня есть настройка сигнала для события удаления объекта на слое:
self.layer.featureDeleted.connect(self.feature_deleted)
Когда я пытаюсь получить атрибут из удаленной функции в слоте, выдается ошибка StopIteration (то есть он не может получить функцию).
Я бы подумал, что я все еще смогу получить атрибуты из удаленного объекта до того, как изменения в уровне будут зафиксированы? В противном случае я не вижу, что использовать параметр FID.
def feature_deleted(self, fid):
feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next()
idx = self.layer.fieldNameIndex('my_attribute')
print feature.attributes()[idx]
Как я могу получить доступ к атрибутам удаленного объекта (до того, как изменения в уровне будут зафиксированы)?
Ответы:
Там будет два момента, когда вы все еще можете получить функции, которые должны быть удалены:
Когда вы удаляете их в сеансе редактирования, но не сохраняете или не сохраняете изменения (т. Е. Вы все равно можете выполнить откат).
Непосредственно перед фиксацией удаленных функций (т. Е. Вы только что нажали
Save Layer Edits
кнопку или только что позвонилиlayer.commitChanges()
).источник