QTreeWight树形菜单右键删除、右键菜单等功能

QTreeWight

最终效果

在这里插入图片描述

实现右键菜单及删除功能

       # coding=utf-8

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class demo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        hbox = QHBoxLayout(self)

        left = QFrame(self)
        left.setFrameShape(QFrame.StyledPanel)  # QFrame 控件添加StyledPanel样式使QFrame 控件之间的界限更加明显
        right = QFrame(self)
        right.setFrameShape(QFrame.StyledPanel)

        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.addWidget(left)
        splitter1.setSizes([20, ])  # 设置分隔条位置
        splitter1.addWidget(right)
        hbox.addWidget(splitter1)
        self.setLayout(hbox)

        # # 树型菜单控件样式及属性设置
        self.tree = QTreeWidget(left)
        self.tree.setStyleSheet("background-color:#eeeeee;border:outset;color:#215b63;")  # 树形结构样式
        self.tree.setAutoScroll(True)  # 滑动栏自动
        self.tree.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed)  # 触发方式
        self.tree.setTextElideMode(Qt.ElideMiddle)  # elidemode(省略模式),指文本超出控件显示范围时,以省略号代替未能显示的文本
        self.tree.setIndentation(30)
        self.tree.setRootIsDecorated(True)  # 去掉QTreeWidget中节点之间的虚线
        self.tree.setUniformRowHeights(True)  # 控制视图中所有数据项是否保持相同高度,所有高度都与视图中第一个数据项的高度相同,如果视图中第一个数据项的高度调整,其他数据项的高度都会跟随调整。
        self.tree.setItemsExpandable(True)  # 树节点展开功能 True:开
        self.tree.setAnimated(False)  # 滑动展开
        self.tree.setHeaderHidden(True)  # 隐藏树结构头
        self.tree.setExpandsOnDoubleClick(True)  # 双击展开树结构,默认为单击
        self.tree.setObjectName("tree")  # 设置属性名
        self.tree.setContextMenuPolicy(Qt.CustomContextMenu)  # 打开右键菜单的策略
        self.tree.customContextMenuRequested.connect(self.treeWidgetItem_Right)  # 绑定右键事件


        # 设置根节点
        root = QTreeWidgetItem(self.tree)
        root.setText(0, '测试根节点1')
        root1 = QTreeWidgetItem(self.tree)
        root1.setText(0, "测试根节点2")
        # # 设置树形控件的列的宽度
        # self.tree.setColumnWidth(0, 150)
        # 设置子节点1
        child1 = QTreeWidgetItem()
        child1.setText(0, '测试1')
        root.addChild(child1)
        # 设置子节点2
        child2 = QTreeWidgetItem(root)
        child2.setText(0, '测试2')
        # 加载根节点的所有属性与子控件
        self.tree.addTopLevelItem(root)

        child1 = QTreeWidgetItem()
        child1.setText(0, '测试3')
        root1.addChild(child1)
        
        # 树节点监听事件
        self.tree.clicked.connect(self.onClicked)

        # 窗口最大化
        self.showMaximized()
        self.setWindowTitle('树案列')
        self.show()

    # # 右键事件功能函数
    def treeWidgetItem_Right(self, pos):
        current_item = self.tree.currentItem()  # 获取当前节点
        item_flag = self.tree.itemAt(pos)  # 确认节点为树节点标志

        if current_item is not None and item_flag is not None:
            popMenu = QMenu()

            delete = QAction(u'删除', self)
            delete.triggered.connect(self.onClicked)  # 连接删除功能(未定义)
            popMenu.addAction(delete)

            modify = QAction(u'修改', self)
            modify.triggered.connect(self.onClicked)  # 连接删除功能(未定义)
            popMenu.addAction(modify)

            refresh = QAction(u'刷新', self)
            refresh.triggered.connect(self.onClicked)  # 连接删除功能(未定义)
            popMenu.addAction(refresh)

            popMenu.exec_(QCursor.pos())

    def onClicked(self):
        item = self.tree.currentItem()
        print('Key=%s,value=%s' % (item.text(0), item.text(1)))
        if item.text(0) == '测试1':
            self.on_pushButton1_clicked()
        elif item.text(0) == '测试2':
            self.on_pushButton2_clicked()
        else:
            print('返回主界面')

    # 打开测试1
    def on_pushButton1_clicked(self):
        # self.stackedWidget.setCurrentIndex(0)
        print("测试1")

    # 打开测试2
    def on_pushButton2_clicked(self):
        # self.stackedWidget.setCurrentIndex(1)
        print("测试2")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = demo()
    ex.show()
    sys.exit(app.exec_())


END

猜你喜欢

转载自blog.csdn.net/cjw12581/article/details/107936005