Python 如何为QTreeView项目设置与其相关的自定义图标';s后缀

Python 如何为QTreeView项目设置与其相关的自定义图标';s后缀,python,qtreeview,pyside2,qfilesystemmodel,Python,Qtreeview,Pyside2,Qfilesystemmodel,我正在使用QTreeView和QFileSystemModel类显示给定路径下的文件夹结构。现在我需要帮助根据文件扩展名自定义树项目的图标(即,如果文件类型为*.png设置icon pngIcon.svg,或者如果文件类型为*.mp4,则将icon设置为mp4Icon.svg) 这是我的GUI代码和快照 从PySide2导入QtCore、QtGui、QtWidgets 导入系统 类Ui_主窗口(对象): def设置UI(自我,主窗口): MainWindow.setObjectName(“Mai

我正在使用QTreeView和QFileSystemModel类显示给定路径下的文件夹结构。现在我需要帮助根据文件扩展名自定义树项目的图标(即,如果文件类型为*.png设置icon pngIcon.svg,或者如果文件类型为*.mp4,则将icon设置为mp4Icon.svg)

这是我的GUI代码和快照

从PySide2导入QtCore、QtGui、QtWidgets
导入系统
类Ui_主窗口(对象):
def设置UI(自我,主窗口):
MainWindow.setObjectName(“MainWindow”)
主窗口。调整大小(800600)
self.centralwidget=qtwidts.QWidget(主窗口)
self.centralwidget.setObjectName(“centralwidget”)
self.verticalLayout=qtwidts.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName(“verticalLayout”)
self.inodTreeView=qtwidts.QTreeView(self.centralwidget)
self.inodTreeView.setObjectName(“inodTreeView”)
self.verticalLayout.addWidget(self.inodTreeView)
MainWindow.setCentralWidget(self.centralwidget)
自重传(主窗口)
QtCore.QMetaObject.connectSlotsByName(主窗口)
def重新传输(自身,主窗口):
setWindowTitle(qtwidts.QApplication.translate(“MainWindow”,“MainWindow”,无,-1))
类inodWindow(QtWidgets.QMainWindow、Ui_MainWindow):
def uuu init uuu(self,parent=None):
超级(inodWindow,self)。\uuu初始化(父级)
self.setupUi(self)
iModel=qtwidts.QFileSystemModel()
iModel.setRootPath(QtCore.QDir.rootPath())
self.inodTreeView.setModel(iModel)
self.inodTreeView.setRootIndex(iModel.index('E:/Tech/Code/inode'))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=qtwidts.QApplication(sys.argv)
w=inodWindow()
w、 show()
sys.exit(app.exec_())

您必须使用QFileIconProvider来提供QFileSystemModel,并覆盖方法图标:

import os
current_dir =os.path.dirname(os.path.realpath(__file__))

class FileIconProvider(QtWidgets.QFileIconProvider):
    def icon(self, parameter):
        if isinstance(parameter, QtCore.QFileInfo):
            info = parameter
            if info.suffix() == "png":
                return QtGui.QIcon(os.path.join(current_dir, "pngIcon.svg"))
            elif info.suffix() == "mp4":
                return QtGui.QIcon(os.path.join(current_dir, "mp4Icon.svg"))
        return super(FileIconProvider, self).icon(parameter)
iModel = QtWidgets.QFileSystemModel()
iModel.setIconProvider(FileIconProvider())
iModel.setRootPath(QtCore.QDir.rootPath())