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