Pregunta de PyQgis: ¿Cómo cambiar o establecer la capa activa?

9

Al desarrollar un complemento QGIS, descubrí que si no se selecciona ninguna capa en el panel Capas, puedo iterar sobre todas las capas y hacerles algo, pero "activarlas".

¿Podría alguien darme una pista por favor?

Martin0x777
fuente

Respuestas:

18

Puede configurar la capa activa utilizando el objeto qgis.utils.iface (es decir, QgisInterface ):

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

Borrar la selección, o la capa activa (elemento QTreeWidget subrayado en QGIS 2.0), en la leyenda es un poco más complicado:

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

Hay tres formas de recuperar las capas actuales, en relación con lo que es posible que desee hacer:

~ a través de QList <QgsMapLayer *> QgsLegendInterface :: layers ()

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

~ a través de QList <QgsMapLayer *> QgsMapCanvas :: layers () :

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

~ vía const QMap <QString, QgsMapLayer *> & QgsMapLayerRegistry :: mapLayers () :

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

Consulte estas respuestas para obtener información sobre las diferencias en esas colecciones de capas.

dakcarto
fuente