Eu tenho uma configuração de sinal para um evento de exclusão de recurso em uma camada:
self.layer.featureDeleted.connect(self.feature_deleted)
Quando tento pegar um atributo do recurso excluído no slot, um erro StopIteration é gerado (ou seja, ele não pode recuperar o recurso).
Eu teria pensado que ainda deveria conseguir recuperar atributos de um recurso excluído antes que as alterações na camada sejam confirmadas? Caso contrário, não vejo o uso do 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]
Como acessar os atributos de um recurso excluído (antes que as alterações na camada sejam confirmadas)?
Respostas:
Existem dois momentos em que você ainda pode obter recursos que devem ser excluídos:
Quando você os exclui em uma sessão de edição, mas não efetuou ou salvou alterações (ou seja, você ainda pode reverter).
Logo antes dos recursos excluídos serem confirmados (ou seja, você acabou de clicar no
Save Layer Edits
botão ou de ligarlayer.commitChanges()
).fonte