Ich habe Probleme, herauszufinden, wie ich über Kartenebenen iterieren kann. Ich kann über auf die aktuell hervorgehobene Ebene im Inhaltsverzeichnis zugreifen iface.activeLayer()
, möchte jedoch, dass mein Code auf allen Ebenen ausgeführt wird.
Ich sehe nichts in der API, das einen einfachen Zugriff auf diese Funktionalität ermöglicht, und konnte kein gutes Online-Beispiel finden, aber vielleicht habe ich etwas verpasst?
Antworten:
Versuchen...
Wurde aus consolidatethread.py vom QConsolidate-Plug-in entfernt .
Beschreibung des QgsLegendInterface-Objekts, das von legendInterface () zurückgegeben wurde.
Bearbeiten : oben wurden Informationen zu "Selbst" hinzugefügt.
quelle
Es gibt auch zwei andere Möglichkeiten:
Sie erhalten eine Liste der Ebenen
oder
quelle
2.16
und obenFür QGIS 2.6 ist hier der Code zum Identifizieren und Gruppieren der einzelnen Ebenen:
Hinweis: Nach dem Gruppieren muss ich die doppelte Ebene entfernen, damit ich sie verwendet habe
root.removeLayer(lyr)
.quelle
Für QGIS 3 wurde
QgsMapLayerRegistry
die Funktionalität nach verschobenQgsProject
.Wenn Sie also über Kartenebenen iterieren, sollten Sie diese Struktur verwenden:
.mapLayers()
gibt ein Wörterbuch zurück, das wie folgt strukturiert ist{layer_x_id: layer_x, layer_y_id: layer_y, ....}
. Dann können Sie über Ebenen wie folgt iterieren:Da
.mapLayers()
dictionary (dict
) zurückgegeben wird, können Sie auch eine Dictionary-.values()
Methode verwenden,list
die in diesem Fall nur Layer zurückgibt . Dann können Sie über Ebenen wie folgt iterieren:Wenn Sie möchten, können Sie folgendermaßen iterieren:
quelle
for layer in layers: print(layer)
Sie können das Skript zum Drucken der Schlüssel verwenden. Oder einfachprint(layers.keys())
ohnefor
Schleife verwenden.