gpt4 book ai didi

python - 如何为 QTreeView 项目设置相对于其后缀的自定义图标

转载 作者:行者123 更新时间:2023-12-01 07:44:57 25 4
gpt4 key购买 nike

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

这是我的代码和 GUI 的快照。

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

最佳答案

您必须对 QFileSystemModel 使用 QFileIconProvider,并重写方法图标:

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())

关于python - 如何为 QTreeView 项目设置相对于其后缀的自定义图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com