Obtenir la liste des noms de couches à l'aide de PyQGIS?

11

J'ai besoin d'une liste contenant les noms de toutes les couches dans une session QGIS. J'ai fait la tâche

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

mais cela a le problème que seuls les noms des couches visibles sont extraits. Comment puis-je obtenir une liste avec les noms de toutes les couches (visibles ou non) utilisant PyQGIS?

jgpallero
la source

Réponses:

18

QgsMapLayerRegistry.instance().mapLayers() vous donnera tous les calques ouverts.

Si vous voulez les noms, alors:

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

names sera une liste de noms de calques

ou en utilisant une fonction normale:

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

Depuis la version 3, les fonctionnalités QgsMapLayerRegistryont été déplacées vers QgsProject: https://qgis.org/api/api_break.html

Mise à jour pour QGIS3.x:

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

selon la réponse de @Nathan W, cela produit une liste de couches dans le projet en cours:

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

RafDouglas
la source