Ich habe eine Signaleinrichtung für ein Feature-Löschereignis auf einer Ebene:
self.layer.featureDeleted.connect(self.feature_deleted)
Wenn ich versuche, ein Attribut aus dem gelöschten Feature im Slot zu holen , wird ein StopIteration- Fehler ausgegeben (dh, das Feature kann nicht abgerufen werden).
Ich hätte gedacht, ich sollte immer noch in der Lage sein, Attribute von einem gelöschten Feature abzurufen, bevor die Änderungen an der Ebene festgeschrieben werden. Ansonsten sehe ich nicht, was der fid-Parameter verwendet.
def feature_deleted(self, fid):
feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next()
idx = self.layer.fieldNameIndex('my_attribute')
print feature.attributes()[idx]
Wie kann ich auf die Attribute eines gelöschten Features zugreifen (bevor die Änderungen an der Ebene übernommen werden)?
Antworten:
Es würde zwei Momente geben, in denen Sie noch Features erhalten können, die gelöscht werden sollen:
Wenn Sie sie in einer Editiersitzung löschen, aber keine Änderungen festgeschrieben oder gespeichert haben (dh, Sie könnten immer noch ein Rollback durchführen).
Kurz bevor die gelöschten Funktionen festgeschrieben werden (dh Sie haben gerade auf die
Save Layer Edits
Schaltfläche geklickt oder gerade angerufenlayer.commitChanges()
).quelle