rscder-pub/rscder/gui/layertree.py
2022-05-10 14:28:48 +08:00

87 lines
2.8 KiB
Python

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt,QModelIndex
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import (QTreeView, QTreeWidgetItem, QAbstractItemView, QHeaderView, QStyleFactory)
from rscder.gui.actions import get_action_manager
from rscder.utils.project import PairLayer, Project
class LayerTree(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# self.tree_view = QTreeView(self)
self.tree = QtWidgets.QTreeWidget(self)
self.tree.setColumnCount(1)
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.right_menu_show)
self.root=QTreeWidgetItem(self.tree)
self.tree.setHeaderHidden(True)
# self.tree.setHeaderLabels(['图层'])
self.root.setText(0,'图层')
# child1=QTreeWidgetItem()
# child1.setText(0,'child1')
# child1.setCheckState(0,Qt.Checked)
# self.root.addChild(child1)
self.tree.expandAll()
self.tree.addTopLevelItem(self.root)
self.tree.clicked.connect(self.onClicked)
layout = QtWidgets.QGridLayout()
layout.addWidget(self.tree)
self.setLayout(layout)
self.setLayoutDirection(Qt.LeftToRight)
def onClicked(self,index):
print(index.row())
item = self.tree.currentItem()
if item == self.root:
return
layer_id = str(item.data(0, Qt.UserRole))
layer = Project().layers[layer_id]
print(layer.l1_name)
print(layer.l2_name)
def add_layer(self, layer:str):
layer:PairLayer = Project().layers[layer]
item1 = QtWidgets.QTreeWidgetItem(self.root)
item1.setText(0, layer.l1_name)
item1.setCheckState(0, Qt.Checked)
item2 = QtWidgets.QTreeWidgetItem(self.root)
item2.setText(0, layer.l2_name)
item2.setCheckState(0, Qt.Checked)
item1.setData(0, Qt.UserRole, layer.id)
item2.setData(0, Qt.UserRole, layer.id)
self.tree.expandAll()
def clear(self):
self.tree.clear()
self.root = QTreeWidgetItem(self.tree)
self.root.setText(0,'图层')
self.tree.addTopLevelItem(self.root)
def right_menu_show(self, position):
rightMenu = QtWidgets.QMenu(self)
# QAction = QtWidgets.QAction(self.menuBar1)
item = self.tree.currentItem()
action_manager = get_action_manager()
actions = []
if item == self.root:
data_load_action = action_manager.get_action('&数据加载', 'File')
actions.append(data_load_action)
else:
pass
for action in actions:
rightMenu.addAction(action)
rightMenu.exec_(self.mapToGlobal(position))