Tengo una configuración de señal para un evento de eliminación de características en una capa:
self.layer.featureDeleted.connect(self.feature_deleted)
Cuando intento obtener un atributo de la función eliminada en la ranura, se produce un error StopIteration (es decir, no puede recuperar la función).
¿Pensé que aún debería poder recuperar los atributos de una entidad eliminada antes de que se confirmen los cambios en la capa? De lo contrario, no veo para qué sirve el parámetro 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]
¿Cómo puedo acceder a los atributos de una entidad eliminada (antes de que se confirmen los cambios en la capa)?
Respuestas:
Habría dos momentos en los que aún puede obtener funciones que se eliminarán:
Cuando los elimina en una sesión de edición, pero no ha confirmado ni guardado los cambios (es decir, aún podría revertirlos).
Justo antes de que se confirmen las funciones eliminadas (es decir, acaba de hacer clic en el
Save Layer Edits
botón o acaba de llamarlayer.commitChanges()
).fuente