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?
quelle
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?
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.