Как установить пользовательские значки для элементов QTreeView относительно его суффикса - PullRequest
1 голос
/ 08 июня 2019

Я использую классы QTreeView и QFileSystemModel для отображения структуры папок по заданному пути. Теперь мне нужна помощь для настройки значков для элемента дерева в соответствии с расширением файла (т. Е. Если тип файла * .png, установите значок pngIcon.svg или если тип файла * .mp4, тогда установите значок в mp4Icon.svg).

Вот мой код и снимок графического интерфейса.

from PySide2 import QtCore, QtGui, QtWidgets
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.inodTreeView = QtWidgets.QTreeView(self.centralwidget)
        self.inodTreeView.setObjectName("inodTreeView")
        self.verticalLayout.addWidget(self.inodTreeView)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtWidgets.QApplication.translate("MainWindow", "MainWindow", None, -1))

class inodWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(inodWindow, self).__init__(parent)
        self.setupUi(self)
        iModel = QtWidgets.QFileSystemModel()
        iModel.setRootPath(QtCore.QDir.rootPath())
        self.inodTreeView.setModel(iModel)
        self.inodTreeView.setRootIndex(iModel.index('E:/Tech/Code/inode'))


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = inodWindow()
    w.show()
    sys.exit(app.exec_())

enter image description here

1 Ответ

1 голос
/ 08 июня 2019

Вы должны использовать 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())
...