马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1 QTreeWidget树类
QTreeWidget类可以呈现数组、数列等数据,而且可以举行交互,它使用尺度的数据模型,其单元格数据通过QTableWidgetItem对象来实现。
QTreeWidget继承自QTreeView,是封装了默认Model的QTreeView,此中的元素属于QTreeWidgetItem范例,插入后就是树节点,delete方法可以删除节点。
QTreeWidget常用方法如下:
方法形貌setColumn Width(列,宽度)设置指定列的宽度insertTopLevelItems()在视图的顶层索引中插入项目列表expandAll()展开全部树形节点invisibleRootItem()返回树形控件中不可见的根选项(Root Item)selectedItems()返回全部选定的非隐蔽项目的列表 QTreeWidgetItem类常用的方法如下:
方法形貌addChild()将子项追加到子列表中setText()设置显示的节点文本Text()返回显示的节点文本setCheckState(列,状态)设置指定列的选中状态(Qt.CheckState.X):
Checked:节点选中
UnChecked:节点未选中setIcon(列,图标)在指定的列中显示图标 2 树和节点
树形布局是通过QTreeWidget和QTreeWidgetItem类实现的,前者为树,后者为节点。QTreeWidget对象创建后是没有任何项的,起主要增加顶层项,方法有以下三种。
(1)在QTreeWidgetItem中构造方法时,直接将QTreeWidget对象作为参数通报进去。
(2)使用QTreeWidget的隐形根节点,调用QTreeWidgetItem相干方法增加子项即可。
(3)直接调用QTreeWidget相干方法。
追加顶层项:树对象创建以后,通过addTopLevelItem(QTreeWidgetItem item)方法在顶层项参加item项的顶层项,也可以通过addTopLevelItems(iter[QTreeWidgetItem] items)将一个迭代范例items中的多个项参加顶层项的末了。
如果要插入的项已经在树对象中,则该项不会重复参加,如果是多项中有部门项已经在树对象中,则重复项不会参加。
插入顶层项:通过insertTopLevelItem(int index, QTreeWidgetItem item)方法在树对象顶层项列表的index位置插入item对应项,该位置及其后的项目自动后移,也可以通过insertTopLevelItems(int index,(iter[QTreeWidget] items))将一个迭代范例items中多个项从index位置开始次序插入,原位置的项自动后移。
3 案例
- # -*- coding:utf-8 -*-
- """
- ------------------------------------------------
- File Name: 树的动态节点.py
- Description:
- Author: lzq
- date:2024-08-02 09:42
- ------------------------------------------------
- """
- import sys
- from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QHBoxLayout, QTreeWidget, \
- QTreeWidgetItem, QLineEdit
- class MyWidget(QWidget):
- def __init__(self, parent=None):
- super(MyWidget, self).__init__(parent)
- self.setWindowTitle("TreeWidget测试")
- #设置3个命令按钮,水平布局
- hLayBtn=QHBoxLayout()
- pbAdd=QPushButton('添加')
- pbUpdate=QPushButton('修改')
- pbDel=QPushButton('删除')
- pbAdd.clicked.connect(self.addTreeNode)
- pbUpdate.clicked.connect(self.updateTreeNode)
- pbDel.clicked.connect(self.delTreeNode)
- hLayBtn.addWidget(pbAdd)
- hLayBtn.addWidget(pbUpdate)
- hLayBtn.addWidget(pbDel)
- #树tree:设置列数为1,“名称”标题,设置树节点
- self.tree=QTreeWidget(self)
- self.tree.setColumnCount(1)
- self.tree.setHeaderLabels(['名称'])#设置标题
- #在tree中创建root节点
- root=QTreeWidgetItem(self.tree)
- root.setText(0,'学校')
- #在root中创建child1节点
- childXy1=QTreeWidgetItem(root)
- childXy1.setText(0,'学院1')
- childXy2 = QTreeWidgetItem(root)
- childXy2.setText(0, '学院2')
- childXi = QTreeWidgetItem(childXy2)
- childXi.setText(0, '1系')
- #root节点作为顶层节点
- self.tree.addTopLevelItem(root)
- self.tree.expandAll()
- #把1个单元行文本框、水平布局的4个命令按钮和树进行垂直布局
- vLayout=QVBoxLayout(self)
- self.le=QLineEdit()
- vLayout.addWidget(self.le)
- vLayout.addLayout(hLayBtn)
- vLayout.addWidget(self.tree)
- self.setLayout(vLayout)
- #添加节点
- def addTreeNode(self):
- item=self.tree.currentItem()
- newNode=QTreeWidgetItem(item)
- txt =self.le.text()
- if txt != '':
- newNode.setText(0, txt)
- #更新节点
- def updateTreeNode(self):
- item=self.tree.currentItem()
- txt =self.le.text()
- if txt != '':
- item.setText(0, txt)
- #删除节点
- def delTreeNode(self):
- item=self.tree.currentItem()
- root=self.tree.invisibleRootItem()
- for item in self.tree.selectedItems():
- (item.parent() or root).removeChild(item)
- if __name__=='__main__':
- app = QApplication(sys.argv)
- w = MyWidget()
- w.show()
- sys.exit(app.exec())
复制代码 思绪如下:
(1) 创建单行文本框、3个命令按钮、树及初始节点
- #设置3个命令按钮,水平布局
- hLayBtn=QHBoxLayout()
- pbAdd=QPushButton('添加')
- pbUpdate=QPushButton('修改')
- pbDel=QPushButton('删除')
- pbAdd.clicked.connect(self.addTreeNode)
- pbUpdate.clicked.connect(self.updateTreeNode)
- pbDel.clicked.connect(self.delTreeNode)
- hLayBtn.addWidget(pbAdd)
- hLayBtn.addWidget(pbUpdate)
- hLayBtn.addWidget(pbDel)
复制代码 (2)添加、删除和修改按钮关联对应其槽函数:
- #添加节点
- def addTreeNode(self):
- item=self.tree.currentItem()
- newNode=QTreeWidgetItem(item)
- txt =self.le.text()
- if txt != '':
- newNode.setText(0, txt)
- #更新节点
- def updateTreeNode(self):
- item=self.tree.currentItem()
- txt =self.le.text()
- if txt != '':
- item.setText(0, txt)
- #删除节点
- def delTreeNode(self):
- item=self.tree.currentItem()
- root=self.tree.invisibleRootItem()
- for item in self.tree.selectedItems():
- (item.parent() or root).removeChild(item)
复制代码 本文至此结束,喜欢点赞关注,您的关注和点赞是路卿进步的动力哦!老Baby们!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |