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?
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?
Respuestas:
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.