首先,我使用Pyside2,我想让QListView在默认窗口中看到图标,比如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)发布于 2021-06-16 15:13:22
您必须使用根据与文件或文件夹关联的QFileInfo返回图标的QFileIconProvider。
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()https://stackoverflow.com/questions/67997817
复制相似问题