QGISプラグインを開発したところ、[レイヤー]パネルでレイヤーが選択されていない場合、すべてのレイヤーを反復処理して何でもできるが、「アクティブ化」できることがわかりました。
誰かが私にヒントを教えてくれませんか?
QGISプラグインを開発したところ、[レイヤー]パネルでレイヤーが選択されていない場合、すべてのレイヤーを反復処理して何でもできるが、「アクティブ化」できることがわかりました。
誰かが私にヒントを教えてくれませんか?
回答:
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, ...}