pyqt 在QTreeView里显示图标

首先要自己构建一个model,其实就是实现抽象类QAbstractItemModel,论述这个过程的文章有很多,比如http://devbean.blog.51cto.com/448512/268468,也可以参考pyqt提供的demo:simpletreemodel.pyw,本文中的例子就是在这个demo的基础上进行改进,实现treemodel显示图标的功能。

 

具体修改的地方在TreeModel类下的data函数里加入以下代码:

        if role == QtCore.Qt.DecorationRole:

            if index.column()>0:                         #只让第一列显示图标,可以根据需要进行调整
                return None

            node = self.nodeFromIndex(index)
            if node.parent() == self.rootItem :     #根节点也不显示图标
                return None          
            if node.childCount()>0:                     #有子节点的就不显示图标
                return None           
            if node is None:
                return None
            else:
                pixmap = QtGui.QPixmap(":/icon1.png")
                if not pixmap.isNull():
                    return QtGui.QIcon("icon1.png")
                return None


由于增加了图片文件,所以还要修改这个项目的资源文件simpletreemodel.qrc,在<qresource>中加上一行关于icon1.png文件的描述,如下所示:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
   <file>default.txt</file>
   <file alias="icon1.png">icon1.png</file>
</qresource>
</RCC>

在将图片文件icon1.png放到工作目录下, 将其编译 pyrcc4.exe some.qrc -o someqrc.py(如果是python3,还要加上-py3选项) ,成为simpletreemodel_rc.py

再运行程序就可以看到TreeView左侧的树的子节点上带着图标了

你可能感兴趣的:(工作,python,File)