使用树形小部件显示数据

如果你想显示以树形结构排列的数据,可以使用QTreeWidget来实现。

请注意,使用QTreeWidget并不是显示树形信息的唯一途径。你也可以创建一个数据模型并使用QTreeView来显示它,但这不在本教程的范围内。

注意

这个小部件是一个您可以进一步自定义的现成版本。要了解更多关于Qt中的模型/视图架构,请参考其官方文档

  1. 为这个应用程序导入 QTreeWidgetQTreeWidgetItem

    import sys
    from PySide6.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem
    
  2. 定义一个包含项目结构的字典,以树的形式显示信息,每个项目的文件如下:

    data = {"Project A": ["file_a.py", "file_a.txt", "something.xls"],
            "Project B": ["file_b.csv", "photo.jpg"],
            "Project C": []}
    
  3. 初始化 QApplication 单例:

    app = QApplication()
    
  4. 配置QTreeWidget以拥有两列,一列用于项目名称,另一列用于项目目录中文件的类型信息。您可以使用setHeaderLabels设置列名,如下所述:

    tree = QTreeWidget()
    tree.setColumnCount(2)
    tree.setHeaderLabels(["Name", "Type"])
    
  5. 遍历数据结构,创建QTreeWidgetItem元素,并将相应的子项添加到每个父项中。 我们还仅为文件提取扩展名,并将它们添加到第二列中。 在构造函数中,您可以看到每个元素(QTreeWidgetItem)都被添加到树的不同列中(QTreeWidget)。

    items = []
    for key, values in data.items():
        item = QTreeWidgetItem([key])
        for value in values:
            ext = value.split(".")[-1].upper()
            child = QTreeWidgetItem([value, ext])
            item.addChild(child)
        items.append(item)
    
    tree.insertTopLevelItems(0, items)
    
  6. 显示树并执行QApplication

    tree.show()
    sys.exit(app.exec())
    

最终的应用程序将如下所示:

QTreeWidget example