Pergunta do PyQgis: Como alterar ou definir a camada ativa?

9

Ao desenvolver um plug-in QGIS, descobri que, se nenhuma camada estiver selecionada no painel Camadas, eu posso iterar todas as camadas e fazer qualquer coisa com elas, mas "ativá-las".

Alguém poderia me dar uma dica, por favor?

Martin0x777
fonte

Respostas:

18

Você pode definir a camada ativa usando o objeto qgis.utils.iface (por exemplo, QgisInterface ):

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

A limpeza da seleção ou da camada ativa (item sublinhado QTreeWidget no QGIS 2.0), na legenda é um pouco mais envolvida:

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

Existem três maneiras de recuperar as camadas atuais, em relação ao que você pode querer fazer:

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

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

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

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

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

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

Consulte estas respostas para obter informações sobre as diferenças nessas coleções de camadas.

dakcarto
fonte