PyQgis-Frage: Wie kann ich die aktive Ebene ändern oder festlegen?

9

Bei der Entwicklung eines QGIS-Plugins stellte ich fest, dass ich, wenn im Ebenenbedienfeld keine Ebene ausgewählt ist, alle Ebenen durchlaufen und alles tun kann, aber sie "aktivieren" kann.

Könnte mir bitte jemand einen Hinweis geben?

Martin0x777
quelle

Antworten:

18

Sie können die aktive Ebene mit dem Objekt qgis.utils.iface (dh QgisInterface ) festlegen :

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

Das Löschen der Auswahl oder der aktiven Ebene (unterstrichenes QTreeWidget-Element in QGIS 2.0) in der Legende ist etwas komplizierter:

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

Es gibt drei Möglichkeiten, um die aktuellen Ebenen abzurufen, je nachdem, was Sie möglicherweise tun möchten:

~ über QList <QgsMapLayer *> QgsLegendInterface :: layer ()

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

~ über QList <QgsMapLayer *> QgsMapCanvas :: layer () :

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

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

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

Verweisen Sie auf diese Antworten, um Informationen zu den Unterschieden in diesen Ebenensammlungen zu erhalten.

Dakcarto
quelle