入门 PyQt6 看过来(案例)20~ 动态树

打印 上一主题 下一主题

主题 986|帖子 986|积分 2958

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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 案例
  1. # -*- coding:utf-8 -*-
  2. """
  3. ------------------------------------------------
  4. File Name: 树的动态节点.py
  5. Description:
  6. Author: lzq
  7. date:2024-08-02 09:42
  8. ------------------------------------------------
  9. """
  10. import sys
  11. from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QHBoxLayout, QTreeWidget, \
  12.     QTreeWidgetItem, QLineEdit
  13. class MyWidget(QWidget):
  14.     def __init__(self, parent=None):
  15.         super(MyWidget, self).__init__(parent)
  16.         self.setWindowTitle("TreeWidget测试")
  17.         #设置3个命令按钮,水平布局
  18.         hLayBtn=QHBoxLayout()
  19.         pbAdd=QPushButton('添加')
  20.         pbUpdate=QPushButton('修改')
  21.         pbDel=QPushButton('删除')
  22.         pbAdd.clicked.connect(self.addTreeNode)
  23.         pbUpdate.clicked.connect(self.updateTreeNode)
  24.         pbDel.clicked.connect(self.delTreeNode)
  25.         hLayBtn.addWidget(pbAdd)
  26.         hLayBtn.addWidget(pbUpdate)
  27.         hLayBtn.addWidget(pbDel)
  28.         #树tree:设置列数为1,“名称”标题,设置树节点
  29.         self.tree=QTreeWidget(self)
  30.         self.tree.setColumnCount(1)
  31.         self.tree.setHeaderLabels(['名称'])#设置标题
  32.         #在tree中创建root节点
  33.         root=QTreeWidgetItem(self.tree)
  34.         root.setText(0,'学校')
  35.         #在root中创建child1节点
  36.         childXy1=QTreeWidgetItem(root)
  37.         childXy1.setText(0,'学院1')
  38.         childXy2 = QTreeWidgetItem(root)
  39.         childXy2.setText(0, '学院2')
  40.         childXi = QTreeWidgetItem(childXy2)
  41.         childXi.setText(0, '1系')
  42.         #root节点作为顶层节点
  43.         self.tree.addTopLevelItem(root)
  44.         self.tree.expandAll()
  45.         #把1个单元行文本框、水平布局的4个命令按钮和树进行垂直布局
  46.         vLayout=QVBoxLayout(self)
  47.         self.le=QLineEdit()
  48.         vLayout.addWidget(self.le)
  49.         vLayout.addLayout(hLayBtn)
  50.         vLayout.addWidget(self.tree)
  51.         self.setLayout(vLayout)
  52.     #添加节点
  53.     def addTreeNode(self):
  54.         item=self.tree.currentItem()
  55.         newNode=QTreeWidgetItem(item)
  56.         txt =self.le.text()
  57.         if txt != '':
  58.             newNode.setText(0, txt)
  59.     #更新节点
  60.     def updateTreeNode(self):
  61.         item=self.tree.currentItem()
  62.         txt =self.le.text()
  63.         if txt != '':
  64.             item.setText(0, txt)
  65.     #删除节点
  66.     def delTreeNode(self):
  67.         item=self.tree.currentItem()
  68.         root=self.tree.invisibleRootItem()
  69.         for item in self.tree.selectedItems():
  70.             (item.parent() or root).removeChild(item)
  71. if __name__=='__main__':
  72.     app = QApplication(sys.argv)
  73.     w = MyWidget()
  74.     w.show()
  75.     sys.exit(app.exec())
复制代码
思绪如下:
(1) 创建单行文本框、3个命令按钮、树及初始节点
  1.                 #设置3个命令按钮,水平布局
  2.         hLayBtn=QHBoxLayout()
  3.         pbAdd=QPushButton('添加')
  4.         pbUpdate=QPushButton('修改')
  5.         pbDel=QPushButton('删除')
  6.         pbAdd.clicked.connect(self.addTreeNode)
  7.         pbUpdate.clicked.connect(self.updateTreeNode)
  8.         pbDel.clicked.connect(self.delTreeNode)
  9.         hLayBtn.addWidget(pbAdd)
  10.         hLayBtn.addWidget(pbUpdate)
  11.         hLayBtn.addWidget(pbDel)
复制代码
(2)添加、删除和修改按钮关联对应其槽函数:
  1.     #添加节点
  2.     def addTreeNode(self):
  3.         item=self.tree.currentItem()
  4.         newNode=QTreeWidgetItem(item)
  5.         txt =self.le.text()
  6.         if txt != '':
  7.             newNode.setText(0, txt)
  8.     #更新节点
  9.     def updateTreeNode(self):
  10.         item=self.tree.currentItem()
  11.         txt =self.le.text()
  12.         if txt != '':
  13.             item.setText(0, txt)
  14.     #删除节点
  15.     def delTreeNode(self):
  16.         item=self.tree.currentItem()
  17.         root=self.tree.invisibleRootItem()
  18.         for item in self.tree.selectedItems():
  19.             (item.parent() or root).removeChild(item)
复制代码
本文至此结束,喜欢点赞关注,您的关注和点赞是路卿进步的动力哦!老Baby们!!!




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表