PyQgisの質問:アクティブレイヤーを変更または設定する方法


9

QGISプラグインを開発したところ、[レイヤー]パネルでレイヤーが選択されていない場合、すべてのレイヤーを反復処理して何でもできるが、「アクティブ化」できることがわかりました。

誰かが私にヒントを教えてくれませんか?

回答:


18

qgis.utils.ifaceオブジェクト(つまりQgisInterface)を使用してアクティブレイヤーを設定できます。

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

凡例の選択またはアクティブレイヤー(QGIS 2.0では下線が引かれたQTreeWidgetアイテム)をクリアすることは、少し複雑です。

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

現在のレイヤーを取得するには、何をしたいかによって、3つの方法があります。

〜QList <QgsMapLayer *> QgsLegendInterface :: layers()経由

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

〜QList <QgsMapLayer *> QgsMapCanvas :: layers()経由:

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

〜経由のconst QMap <QStringの、QgsMapLayer *>&QgsMapLayerRegistry :: mapLayers()

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

これらのレイヤーコレクションの違いについては、これらの回答参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.