Python / Pyside:自己的QFileIconProvider实现失败,没有抛出异常

时间:2013-08-07 14:27:17

标签: python pyside qfile

我尝试创建自己的QFileIconProvider类,我想将其用于QFileSystemModel。 我最终得到了这段代码:

class SeIconProvider(QtGui.QFileIconProvider):

def __init__(self):
    QtGui.QFileIconProvider.__init__(self)

    self.rsFileIcon = QtGui.QIcon(':images/rs-file.png')
    self.otherFileIcon = QtGui.QIcon(':images/newfile.png')
    self.folderIcon = QtGui.QIcon(':images/openFolder.png')

def icon(self, type):
    if type == self.File:
        return self.rsFileIcon
    if type == self.Folder:
        return self.folderIcon

    return self.otherFileIcon

def icon(self, info):
    if info.isFile():
        return self.otherFileIcon
    if info.isDir():
        return self.folderIcon
    return self.otherFileIcon

def type(self, info):
    if info.isDir():
        return 'Directory'
    return 'File'

class FolderView(QtGui.QTreeView):

    def __init__(self):
        QtGui.QTreeView.__init__(self)

        self.createComponents()
        self.createLayout()

    def createComponents(self):
        self.model = QtGui.QFileSystemModel()
        self.model.setIconProvider(SeIconProvider())
        self.setModel(self.model)

    def createLayout(self):
        self.setHeaderHidden(True)

现在我的问题是,不仅树视图中没有显示图标,而且代码不会抛出任何异常。有人知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

我现在自己解决了这个问题....有点:D

我曾经以另一种方式编写自己的QFileSystemModel类。然后我覆盖了数据方法并返回了我自己的图标。我的代码如下所示:

class SeFileSystemModel(QtGui.QFileSystemModel):

def __init__(self):
    QtGui.QFileSystemModel.__init__(self)
    self.fileEndPattern = re.compile("^.*\.(\w{2,4})$")

def data(self, index, role):
    if index.column() == 0 and role == QtCore.Qt.DecorationRole:
        if self.fileEndPattern.match(index.data()) is not None:
            if index.data().endswith('rs'):
                return QtGui.QIcon(':icons/rs-file.png')
            return QtGui.QIcon(':icons/newfile.png')

        return QtGui.QIcon(':icons/openFolder.png')

    return super(SeFileSystemModel, self).data(index, role)

class FolderView(QtGui.QTreeView):

    def __init__(self):
        QtGui.QTreeView.__init__(self)

        self.createComponents()

    def createComponents(self):
        self.model = SeFileSystemModel()
        self.setModel(self.model)

如果有人知道,为什么我的原始代码无效,我仍然会非常感谢答案:)