Python PyQt5 QtreeView 替换系统图标为自定义图标

左边呢将文件夹和文件归类显示简单的做了一个分享,今天呢想把读取出的系统图标更换为自定义图标,经过摸索发现,终于这个功能实现了,但是呢和我们昨天实现稍微有些不同,昨天我们进行左右文件归类时使用的是PyQT5中的QWidget进行数据显示,但是呢今天使用的是QFileIconProvider,它和QWidget的区别在于将所有的呈现类型都定义在了主的main函数中,和我们之前调用完全相反了,但是呢并不是完全合并bu进去,如果需要合并需要在QWidget中调用QFileIconProvider内容,请看如下代码,希望能够给大家带来帮助。

QWidget调用QFileIconProvider内容:需要先引用下方py文件才能使用

model.setIconProvider(FileIconProvider())

完全使用QFileIconProvider进行自定义图标呈现:

import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import QFileInfo
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QFileSystemModel, QFileIconProvider, QApplication,\
    QTreeView


class FileIconProvider(QFileIconProvider):

    def __init__(self, *args, **kwargs):
        super(FileIconProvider, self).__init__(*args, **kwargs)
        self.DirIcon = QIcon("D:\DataGost\Python\Dear\wjj-djq.png")

    def icon(self, type_info):
        if isinstance(type_info, QFileInfo):
            return self.getInfoIcon(type_info)

        if type_info == QFileIconProvider.Folder:
            # 如果是文件夹
            return self.DirIcon
        return super(FileIconProvider, self).icon(type_info)

    def getInfoIcon(self, type_info):
        if type_info.isDir():  # 文件夹
            return self.DirIcon
        return super(FileIconProvider, self).icon(type_info)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    model = QFileSystemModel()
    model.setFilter(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot)
    model.setIconProvider(FileIconProvider())  # 设置为自定义的图标提供类
    model.setRootPath("")
    tree = QTreeView()
    tree.setModel(model)
    for col in range(1, 4):
        tree.setColumnHidden(col, True)
    tree.setWindowTitle("Dir View")
    tree.resize(640, 480)
    tree.show()
    sys.exit(app.exec_())

效果如下:

Python PyQt5 QtreeView 替换系统图标为自定义图标_第1张图片

你可能感兴趣的:(Python,PyQt5,QtreeView系统图标更换)