どんな動きをするの?
レイヤウィンドウでレイヤを選択する度に...
選択されていたレイヤ名と、現在選択されているレイヤ名がPythonコンソールに表示されます。
コード
import qgis from qgis.core import * from qgis.gui import * from PyQt5.Qt import QObject, pyqtSignal class LayerTreeViewSample(QObject): # signal-slot使いたいので cleared = pyqtSignal() def changeLayer(self, layer): if (layer == None): # レイヤウィンドウに何も無い状態 self.currentlayer = None self.cleared.emit() return if self.currentlayer != None: print(self.currentlayer.name() + 'が非アクティブになりました。') print(layer.name()+'がアクティブになりました。') self.currentlayer = layer def __init__(self, iface): super(LayerTreeViewSample, self).__init__() self.iface = iface self.currentlayer = self.iface.layerTreeView().currentLayer() self.iface.layerTreeView().currentLayerChanged.connect(self.changeLayer) def __del__(self): self.iface.layerTreeView().currentLayerChanged.disconnect(self.changeLayer)
ソースはこちら
使い方
例として、ここからダウンロードできるサンプルプラグインに追加します。
nodialog_skelton.pyと同じフォルダにソースを置いて、インポート部分に次のコードを追記します。
from .layertreeviewsample import LayerTreeViewSample
nodialog_skelton.pyのstartを次のコードに書き換えます。
def start(self): self.lt = LayerTreeViewSample(self.iface) self.lt.cleared.connect(self.clear)
nodialog_skelton.pyのfinishを次のコードに書き換えます。
def finish(self): self.lt = None
次のメソッドを追加してください。
def clear(self): self.lt = None self.action.setChecked(False)
def clear(self): self.lt = None self.action.setChecked(False)
このようになればOKです。
~略~ from .layertreeviewsample import LayerTreeViewSample class NodialogSkelton(qgis.gui.QgsMapTool): def clear(self): self.lt = None self.action.setChecked(False) def start(self): self.lt = LayerTreeViewSample(self.iface) self.lt.cleared.connect(self.clear) def finish(self): self.lt = None ~略~
ありがとうございました。