pyqt 在QTreeView里显示图标

    技术2024-12-17  10

    首先要自己构建一个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左侧的树的子节点上带着图标了

    最新回复(0)