如何在 QTreeView 中为文件类型使用系统默认图标

How to use system default icons for a file type in a QTreeView

作为参考,这都是使用 Pyqt5 和 Python 3.6:

我有一个 QStandardItemModel,它是从 QStandardItems 构建的,QStandardItems 是 zip 中项目的字符串(该模型显示 zip 文件的所有内容)。我选择了这个选项,因为我无法在本地缓存文件,而且我的研究表明,除非我至少暂时解压,否则 QFileSystemModel 无法处理存档。

QStandardItemModel 中的所有项目都以文件的正确扩展名(.csv、.txt 等)结尾,我需要显示用户在 [=23] 中查看文件时会看到的图标=] 资源管理器,但是在 qtreeview 中显示它(看到 content.csv 的用户也应该看到 excel 的图标)。请注意,此应用程序仅在 windows.

上 运行

如何拉取扩展程序默认的系统文件图标,并在我设置这些项目时进行设置?我是否必须手动下载已知文件类型的图标并执行此操作,还是系统将其存储在我可以访问的地方?

下面是我如何构建和显示模型和树视图的一些基本代码:

        self.zip_model = QtGui.QStandardItemModel()

        # My Computer directory explorer
        self.tree_zip = QTreeView()
        self.tree_zip.setModel(self.zip_model)

    def build_zip_model(self,current_directory):
        self.zip_model.clear()
        with zipfile.ZipFile(current_directory) as zip_file:
            for item in zip_file.namelist():
                model_item = QtGui.QStandardItem(item)
                self.zip_model.appendRow(model_item)

您可以使用 QFileIconProvider:

def build_zip_model(self, current_directory):
    iconProvider = QtWidgets.QFileIconProvider()
    self.zip_model.clear()
    with zipfile.ZipFile(current_directory) as zip_file:
        for item in zip_file.namelist():
            icon = iconProvider.icon(QtCore.QFileInfo(item))
            model_item = QtGui.QStandardItem(icon, item)
            self.zip_model.appendRow(model_item)