필자는 QGIS Framework의 위와 같은 UI에서 여러 그룹을 선택했을 때 해당 그룹들을 반환하는 유틸을 작업했다. QGIS에서 자체적으로 선택된 레이어를 반환하는 QgisInterface.activeLayer() 메소드가 있지만 해당 메소드는 하나의 레이어밖에 못가져오는 한계가 있다.
일단 이 포스트를 시작하기 이전에 염두해야할 사항이 있다.
1. QGIS Framework는 PyQT 기반이라는 것
2. MV (Model-View) 패턴으로 UI가 구성되어 있다는 것
우선 다음과 같은 코드로 레이어 패널에 속한 그룹의 트리(QgsLayerTree)를 가져왔다.
root = QgsProject.instance().layerTreeRoot()
그리고 해당 트리를 model에 import한 다음 view에다가 set하면 다음과 같은 결과가 나온다.
model = QgsLayerTreeModel(root)
view = QgsLayerTreeView()
view.setModel(model)
view.show()
그러나 필자가 원하는 것은 새로운 view가 아닌 Framework내에 있는 view를 원하는 것이다.
view: QgsLayerTreeView = iface.layerTreeView()
QGIS Framework의 UI를 얻기 위해서는 iface (QgisInterface)에 접근하면 된다. 그리고 자체 UI에서 여러 그룹을 선택하고 다음과 같은 결과를 얻었다.
view.selectedNodes()
>>
[<qgis._core.QgsLayerTreeGroup object at 0x000001ED99A231F8>,
<qgis._core.QgsLayerTreeGroup object at 0x000001ED99A23288>,
<qgis._core.QgsLayerTreeGroup object at 0x000001ED99A230D8>]
'[Framework] - QGIS' 카테고리의 다른 글
# 5. QgsLayerTree (0) | 2021.04.21 |
---|---|
# 3. QgsVectorDataProvider (0) | 2021.04.13 |
#2. QgsFeature 이동 (0) | 2021.04.09 |
#1. 시점이동, 객체의 필드 (0) | 2021.01.22 |
#0. QgsGeometry, asPolyline() (0) | 2021.01.22 |
댓글