¿Obtener una lista de nombres de capa usando PyQGIS?

11

Necesito una lista que contenga los nombres de todas las capas en una sesión QGIS. Hice la tarea como

layersNames = []
for i in self.iface.mapCanvas().layers():
   layersNames.append(str(i.name()))

pero esto tiene el problema de que solo se extraen los nombres de las capas visibles. ¿Cómo puedo obtener una lista con los nombres de todas las capas (visibles o no) usando PyQGIS?

jgpallero
fuente

Respuestas:

18

QgsMapLayerRegistry.instance().mapLayers() le dará todas las capas que están abiertas.

Si quieres los nombres, entonces:

names = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values()]

names será una lista de nombres de capa

o usando una función normal:

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    print layer.name()
Nathan W
fuente
6

Desde la versión 3, las QgsMapLayerRegistryfuncionalidades se han trasladado a QgsProject: https://qgis.org/api/api_break.html

Actualización para QGIS3.x:

from qgis.core import QgsProject
names = [layer.name() for layer in QgsProject.instance().mapLayers().values()]
print(names)

Según la respuesta de @Nathan W, esto produce una lista de capas en el proyecto actual:

['GoogleSat', 'MyPointsLayer', 'Roads', 'House_numbers']

RafDouglas
fuente