如何通过QstandardItem设置原始图标



首先,我使用Pyside2,我希望QListView能够看到默认Windows中的图标,例如QFilesystemModel。QFilesystemModel不可用的原因是它希望跨多个路径显示文件夹中的项目。我们使用QStandardItem的appendRow功能实现了这一目标。但是,Windows的默认文件夹、文件和图标无法导入到seticon中。

如何使用QStandardItem 将图标设置为Windows中的样子

这是我的密码。

class CustomListView(QListView):
def __init__(self):
super().__init__()
def setup_model(self, paths):
self.model = QStandardItemModel()
for path in paths:
path = os.listdir(path)

for file in path:
item = QStandardItem(file)
self.model.appendRow(item)
self.setModel(self.model)

您必须使用QFileIconProvider,它返回基于与文件或文件夹关联的QFileInfo的图标。

import os
from PySide2.QtCore import QFileInfo
from PySide2.QtGui import QStandardItem, QStandardItemModel
from PySide2.QtWidgets import QApplication, QFileIconProvider, QListView

class CustomListView(QListView):
def __init__(self):
super().__init__()
self.model = QStandardItemModel()
self.setModel(self.model)
self.icon_provider = QFileIconProvider()
def setup_model(self, paths):
self.model.clear()
for path in paths:
dirs = os.listdir(path)
for name in dirs:
filename = os.path.join(path, name)
icon = self.icon_provider.icon(QFileInfo(filename))
item = QStandardItem(name)
item.setIcon(icon)
self.model.appendRow(item)

def main():
app = QApplication()
view = CustomListView()
view.resize(640, 480)
view.show()
view.setup_model(["/home/user/", "/home/user/Pictures"])
app.exec_()

if __name__ == "__main__":
main()

最新更新