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?

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.