如何在 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)
作为参考,这都是使用 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)