• Qt第六章:渲染树


    渲染树组件: 

    1. import sys
    2. from PySide6.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem
    3. # 数据
    4. data = {"Project A": ["file_a.py", "file_a.txt", "something.xls"],
    5. "Project B": ["file_b.csv", "photo.jpg"],
    6. "Project C": []}
    7. if __name__ == '__main__':
    8. app = QApplication()
    9. # 创建树组件
    10. tree = QTreeWidget()
    11. # 设置列数
    12. tree.setColumnCount(2)
    13. # 设置列头
    14. tree.setHeaderLabels(["Name", "Type"])
    15. items = []
    16. for key, values in data.items():
    17. item = QTreeWidgetItem([key])
    18. for value in values:
    19. ext = value.split(".")[-1].upper()
    20. child = QTreeWidgetItem([value, ext])
    21. item.addChild(child)
    22. items.append(item)
    23. # 挂载到树上
    24. tree.insertTopLevelItems(0, items)
    25. tree.show()
    26. sys.exit(app.exec())

    封装函数:

    1. from PySide6.QtWidgets import QApplication
    2. from PySide6.QtWidgets import QWidget, QTreeWidget, QTreeWidgetItem
    3. """
    4. data: 数据列表
    5. tree: 树组件句柄
    6. column: [(字段,显示名称),...]
    7. id_point: 数据主键(默认id)
    8. parent_pointer: 标注父子关系的字段(默认parent_id)
    9. """
    10. def list2QTree(data, tree: QTreeWidget, column: list, id_point='id', parent_pointer='parent_id') -> QTreeWidget:
    11. # 设置列数
    12. tree.setColumnCount(len(column))
    13. # 标题
    14. tree.setHeaderLabels([i[1] for i in column])
    15. # 顶层节点
    16. items = []
    17. # 转成QTreeWidgetItem列表
    18. data_item = [{id_point: i[id_point], parent_pointer: i[parent_pointer],
    19. 'item': QTreeWidgetItem([str(i[j[0]]) for j in column])} for i in data]
    20. # 转成ID为Key的字典
    21. mapping: dict = dict(zip([i[id_point] for i in data_item], data_item))
    22. # 组树
    23. for d in data_item:
    24. parent: dict = mapping.get(d[parent_pointer])
    25. if parent is None:
    26. items.append(d['item'])
    27. else:
    28. item: QTreeWidgetItem = parent.get('item')
    29. item.addChild(d.get('item'))
    30. # 挂载到树上
    31. tree.insertTopLevelItems(0, items)
    32. return tree

    使用示例:

    1. class Form(QWidget):
    2. def __init__(self, parent=None):
    3. data: list = [
    4. {'id': 1, 'parent_id': 0, 'name': '用户管理', 'url': ''},
    5. {'id': 2, 'parent_id': 0, 'name': '菜单管理', 'url': ''},
    6. {'id': 3, 'parent_id': 1, 'name': '新增用户', 'url': 'https://www.baidu.com'},
    7. {'id': 4, 'parent_id': 1, 'name': '删除用户', 'url': 'https://www.baidu.com'},
    8. {'id': 5, 'parent_id': 2, 'name': '新增菜单', 'url': 'https://www.baidu.com'},
    9. {'id': 6, 'parent_id': 2, 'name': '删除菜单', 'url': ''},
    10. {'id': 7, 'parent_id': 6, 'name': '单个删除', 'url': 'https://www.baidu.com'},
    11. {'id': 8, 'parent_id': 6, 'name': '批量删除', 'url': 'https://www.baidu.com'},
    12. ]
    13. super(Form, self).__init__(parent=parent)
    14. self.setWindowTitle("首次")
    15. self.resize(320, 180)
    16. tree = QTreeWidget(self)
    17. list2QTree(data=data, tree=tree, column=[('name', '姓名'), ('url', '地址')])
    18. if __name__ == '__main__':
    19. app = QApplication([])
    20. form = Form()
    21. form.show()
    22. app.exec()

  • 相关阅读:
    PHP 函数
    XSS-labs靶场实战(四)——第9-11关
    Push-Relabel算法相关阅读
    Node.js 语言特定指南
    51单片机应用从零开始(五)·加减乘除运算
    配置OSPF路由
    视频剪辑调色软件推荐—DaVinlve Studio 18(达芬奇18)
    RS练习 - PTE(一)
    《稻盛和夫给年轻人的忠告》阅读笔记
    js事件流
  • 原文地址:https://blog.csdn.net/wenxingchen/article/details/126785853