Capas visibles
Puede iterar las capas visibles de esta manera:
# Iterate visible layers (warning: only spatial ones)
def iterate_visible_layers():
for layer in iface.mapCanvas().layers():
# TODO: Do something interesting with the layers
print(layer.name())
iterate_visible_layers()
Capas en la TOC (panel de capas / leyenda / árbol de capas)
En caso de que necesite todas las capas en el panel TOC/Capas (no sólo las que están visibles/marcadas, como mapCanvas().layers()
devuelve), puede utilizar esta función:
# Iterate all ToC layers (warning: only spatial ones)
def iterate_toc_layers(group):
for tree_layer in group.findLayers():
# TODO: Do something interesting with the layers
print(tree_layer.layer().name())
root = QgsProject.instance().layerTreeRoot()
iterate_toc_layers(root)
Nota: Puede iterar capas de un grupo específico pasando dicho grupo a iterate_toc_layers()
de esta manera:
my_group = root.findGroup('My group')
iterate_toc_layers(my_group)
Todas las capas registradas
QGIS puede utilizar capas que forman parte del proyecto QGIS pero que no se muestran en el panel TOC/Layers. Por ejemplo, las capas que se pueden utilizar en uniones o relaciones (tablas de búsqueda). Si quiere que esas capas se muestren también, haga lo siguiente:
# Iterate all registered layers (even if they aren't in the TOC)
def iterate_all_layers():
for k, layer in QgsProject.instance().mapLayers().items():
# TODO: Do something interesting with the layers
print(layer.name())
iterate_all_layers()
0 votos
No veo cómo están usando QgsMapLayerRegistry o QgsProject. En QGIS 3.0.2 esto no funciona. Sin embargo, iface.mapCanvas().layers() sí lo hace. Bueno, más o menos. Parece que sólo te da las capas activas (las que has marcado en el panel de capas). ¿Alguien sabe cómo obtener una lista de todas las capas, incluso las que no están marcadas en el panel de capas? Además, si se utiliza el Plugin Builder, éste crea el shell de su plugin por usted. La función de ejecución tiene un parámetro "self", que es necesario para usar iface. Por ejemplo, self.iface.mapCanvas().layers(), sólo para que lo sepa.
0 votos
Por favor, no te olvides de "¿Qué debo hacer cuando alguien responde a mi pregunta?"