Search code examples
pythonpyqticonspyqt5qlistview

Adding icons to items of Qlistview


Straight to the issue, I want to add icons to items of Qlistview. I've been trying with setData, but it does not succeed.

The code:

import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        iconroot = os.path.dirname(__file__)
        self.setFont(QtGui.QFont("Helvetica", 8, QtGui.QFont.Normal, italic=False)) 
        lay = QtWidgets.QVBoxLayout(self)

        self.listView = QtWidgets.QListView()
        lay.addWidget(self.listView)

        self.entry = QtGui.QStandardItemModel()
        self.listView.setModel(self.entry) 
        self.listView.setSpacing(5)

        for text in ("One", "two", "Three", "Four", 
                     "Five etc.."):
            it = QtGui.QStandardItem(text)
            self.entry.appendRow(it)
            it.setData(QtGui.QIcon(iconroot +'/images/flags'),QtCore.Qt.DecorationRole)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

Wish something like this..

enter image description here


Solution

  • Try it:

    import os
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Widget(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super(Widget, self).__init__(parent)
    
    #        iconroot = os.path.dirname(__file__)
    
            self.setFont(QtGui.QFont("Helvetica", 8, QtGui.QFont.Normal, italic=False)) 
            lay = QtWidgets.QVBoxLayout(self)
    
            self.listView = QtWidgets.QListView()
            lay.addWidget(self.listView)
    
            self.entry = QtGui.QStandardItemModel()
            self.listView.setModel(self.entry) 
            self.listView.setSpacing(5)
    
    #        for text in ("One", "two", "Three", "Four", 
            for i, text in enumerate(["One", "two", "Three", "Four",                          # +++
                                      "Five etc.."]):
                it = QtGui.QStandardItem(text)
                self.entry.appendRow(it)
    
    #            it.setData(QtGui.QIcon(iconroot +'/images/flags'), QtCore.Qt.DecorationRole)
                it.setData(QtGui.QIcon(os.path.join('images', 'bao{}.png'.format(i))),        # +++
                                       QtCore.Qt.DecorationRole)
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    

    enter image description here