Question PyQgis: Comment changer ou définir la couche active?

9

En développant un plugin QGIS, j'ai constaté que si aucune couche n'est sélectionnée dans le panneau Calques, je peux parcourir toutes les couches et leur faire quoi que ce soit, mais les "activer".

Quelqu'un pourrait-il me donner un indice s'il vous plaît?

Martin0x777
la source

Réponses:

18

Vous pouvez définir le calque actif à l'aide de l'objet qgis.utils.iface (c'est-à-dire QgisInterface ):

qgis.utils.iface.setActiveLayer(QgsMapLayer)  # returns bool
# or
qgis.utils.iface.legendInterface().setCurrentLayer(QgsMapLayer)  # returns bool

L'effacement de la sélection, ou de la couche active (élément QTreeWidget souligné dans QGIS 2.0), dans la légende est un peu plus compliqué:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
lg = qgis.utils.iface.mainWindow().findChild(QTreeWidget, 'theMapLegend')
lg.selectionModel().clear()  # clear just selection
lg.setCurrentItem(None)  # clear selection and active layer

Il existe trois façons de récupérer les couches actuelles, par rapport à ce que vous souhaitez faire:

~ via QList <QgsMapLayer *> QgsLegendInterface :: layers ()

qgis.utils.iface.legendInterface().layers()  # returns [layer, ...]

~ via QList <QgsMapLayer *> QgsMapCanvas :: couches () :

qgis.utils.iface.mapCanvas().layers()  # returns [layer, ...]

~ via const QMap <QString, QgsMapLayer *> & QgsMapLayerRegistry :: mapLayers () :

QgsMapLayerRegistry.instance().mapLayers()  # returns {'layer_id': layer, ...}

Consultez ces réponses pour obtenir des informations sur les différences dans ces collections de couches.

dakcarto
la source