QTreeWidget 类根据预设的模型提供树形显示控件。
QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。
如果不需要灵活的“模型/视图”框架,可以使用QTreeWidget 来创建有层级关系的树形结构。当把标准 item 模型结合 QTreeView 使用时,可以得到更灵活的使用方法,从而把“数据”和“显示”分离开。
QTreeWidget 信号
测试例子:
"""
python主文件
"""
# -*- coding: utf-8 -*-
from PyQt5 import QtCore
from PyQt5.QtWidgets import QDesktopWidget
import sys
from PyQt5.QtWidgets import *import tree # tree.py文件class myTreeWidget:def __init__(self, objTree):self.myTree = objTree# 设置列数self.myTree.setColumnCount(1)# 设置树形控件头部的标题self.myTree.setHeaderLabels(['机构列表'])# 设置根节点self.root = QTreeWidgetItem(self.myTree)self.root.setText(0, '本单位')# 设置树形控件的列的宽度self.myTree.setColumnWidth(0, 100)# 设置子节点1child1 = QTreeWidgetItem(self.root)child1.setText(0, '市场部')self.root.addChild(child1)# 设置子节点11child11 = QTreeWidgetItem(child1)child11.setText(0, '销售班')# 设置子节点2child2 = QTreeWidgetItem(self.root)child2.setText(0, '财务部')# 设置子节点21child21 = QTreeWidgetItem(child2)child21.setText(0, '财务一班')# 加载根节点的所有属性与子控件self.myTree.addTopLevelItem(self.root)# TODO 优化2 给节点添加响应事件self.myTree.clicked.connect(self.onClicked)# 节点全部展开self.myTree.expandAll()def onClicked(self):item = self.myTree.currentItem()print('Key=%s' % (item.text(0)))class MyPyQTMainForm(QMainWindow, tree.Ui_MainWindow):"""主界面"""def __init__(self):"""初始化"""super(MyPyQTMainForm, self).__init__()self.setupUi(self)# 创建树控件对象self.myTreeTest = myTreeWidget(self.treeWidget)def center(self):"""定义一个函数使得窗口居中显示"""# 获取屏幕坐标系screen = QDesktopWidget().screenGeometry()# 获取窗口坐标系size = self.geometry()newLeft = (screen.width() - size.width()) / 2newTop = (screen.height() - size.height()) / 2self.move(int(newLeft), int(newTop))def addNode(self):"""添加节点"""print('--- addTreeNode ---')item = self.myTreeTest.myTree.currentItem()node = QTreeWidgetItem(item)node.setText(0, '后勤部')def deleteNode(self):"""删除节点"""print('--- delTreeNode ---')item = self.myTreeTest.myTree.currentItem()root = self.myTreeTest.myTree.invisibleRootItem()for item in self.myTreeTest.myTree.selectedItems():(item.parent() or root).removeChild(item)def modifyNode(self):"""修改节点"""print('--- modifyTreeNode ---')item = self.myTreeTest.myTree.currentItem()item.setText(0, '办公室')"""
主函数
"""
if __name__ == '__main__':app = QApplication(sys.argv)myPyMainForm = MyPyQTMainForm()# 主窗口显示在屏幕中间myPyMainForm.center()# 禁止最大化按钮myPyMainForm.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint)# 禁止拉伸窗口大小myPyMainForm.setFixedSize(myPyMainForm.width(), myPyMainForm.height())# 显示主界面myPyMainForm.show()sys.exit(app.exec_())
效果: