QGIS python: QgsLayerTreeView

今回は、2.4から新しく出来たクラスLayerTreeViewについて、紹介していきます。
参照しているバージョンは、2.8です。

2.0-2.3あたりは触っていないので、間違っているかもしれません。
2.4からQGISの独自クラスとして、実装されました。

元々はTreeWidgetを継承したクラスであり、簡単には触れませんでした。
findChildrenで探して無理矢理に触っていました。

クラスの関係的には

QgsLayerTreeView ツリー本体
  QgsLayerTreeNode アイテム
    QgsLayerTreeGroup グループアイテム
    QgsLayerTreeLayer レイヤーアイテム

QgsLayerTreeViewの便利な関数としては

tree = iface.layerTreeView()
tree.selectedLayers()  # 選択している全てのレイヤを取得
tree.selectedNodes()  # 選択している全てのアイテムを取得

UI的に複数選択はできますが、関数的には複数選択する方法がありません。

クラスができたあたりで、新規レイヤを追加した時に追加される場所が選択されている場所になりました。
選択されていない場合、一番先頭に追加されます。

先頭に追加したい時の方法
1.アイテムの選択状態の解除のあとに追加

tree = iface.layerTreeView()
tree.setCurrentLayer(None)  # 選択の解除
QgsMapLayerRegistry.instance().addMapLayer(layer)  # レイヤを追加

2.自動でツリーに追加せず、手動で追加

tree = iface.layerTreeView()
QgsMapLayerRegistry.instance().addMapLayer(layer, False) # ツリーに自動で追加しない
tree_model = tree.layerTreeModel()  # treeModelを取得
tree_root = tree_model.rootGroup()  # rootアイテムの取得
tree_root.insertChildNode(0, QgsLayerTreeLayer(layer))  # rootアイテムの一番上にレイヤアイテムを追加

2を応用すると、自分の好きな位置にレイヤアイテムを追加することができます。
今回はrootの一番上という指定をしましたが、rootではなく好きなグループ・順番を指定すればできます。

今回はこれにて終了です。

コメントを残す

メールアドレスが公開されることはありません。