TreeWidget.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import Optional
  2. from PyQt5.QtCore import Qt
  3. from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem
  4. from .PostgreSQL import PostgreSQL
  5. class Tree:
  6. type = ""
  7. def __init__(self, type: Optional[str] = ''):
  8. self.type = type
  9. def createTree(self, data, parent, parentid):
  10. """递归创建树形结构"""
  11. # 先获取当前层级的所有节点并按sort排序
  12. current_level_nodes = []
  13. for row in data:
  14. if (parentid == '' and row['pbsm'] == '') or (row['pbsm'] == parentid):
  15. current_level_nodes.append(row)
  16. # 按sort字段排序
  17. current_level_nodes.sort(key=lambda x: int(x['sort']) if x['sort'] is not None else 9999)
  18. # 创建当前层级的节点
  19. for row in current_level_nodes:
  20. item = QTreeWidgetItem(parent)
  21. item.setText(0, row['name'])
  22. item.setText(1, row['bsm'])
  23. item.setText(2, row['pbsm'])
  24. item.setData(0, Qt.UserRole + 1, int(row['sort']) if row['sort'] is not None else 9999)
  25. # 递归创建子节点
  26. self.createTree(data, item, row['bsm'])
  27. def initTreeWidget(self, dbcoon):
  28. """初始化QTreeWidget"""
  29. try:
  30. print("初始化 QTreeWidget...")
  31. tree = QTreeWidget()
  32. tree.setStyleSheet("QTreeView::item{padding: 2px;}")
  33. tree.setColumnCount(3)
  34. tree.setColumnHidden(1, True)
  35. tree.setColumnHidden(2, True)
  36. tree.setObjectName(self.type)
  37. tree.setHeaderLabels(["名称", "实体数据名称", "数据类型"])
  38. tree.headerItem().setHidden(True)
  39. print("准备连接数据库...")
  40. pg = PostgreSQL(schema=dbcoon["schema"], host=dbcoon["host"],
  41. port=dbcoon["port"],
  42. user=dbcoon["user"],
  43. password=dbcoon["password"],
  44. dbname=dbcoon["dbname"])
  45. print("数据库连接成功")
  46. print("获取资源目录数据...")
  47. treedata = pg.getZyml()
  48. print(f"资源目录数据数量: {len(treedata)}")
  49. self.createTree(treedata, tree, "")
  50. print("树结构创建成功")
  51. pg.close()
  52. print("数据库连接关闭")
  53. return tree
  54. except Exception as e:
  55. import traceback
  56. print("initTreeWidget 初始化失败:", e)
  57. print(traceback.format_exc())
  58. raise e # 抛出给外层捕获