[PyQt] Overriding QStandardItem with __iter__ in PyQt5

triccare triccare triccare at gmail.com
Tue Oct 25 16:15:28 BST 2016


Below is the code in question. Basically, I am adding an __iter__ property
to QStandardItem. In PyQt4, this worked fine. However, in PyQt5, the text
of the item no longer appears in the QTreeView. The item is there; you can
select it. It just doesn't show.

PyQt5.QtGui.QStandardItem does not appear to natively have an __iter__
property, so not sure why this is having such an effect.

Other environment info:

   - OS X 10.11.6
   - anaconda 1.5.1
   - Python 2.7.12
   - QT/PyQT5 versions: 5.6

Thank you for your time,

from PyQt5 import (Qt, QtCore, QtGui, QtWidgets)
from sip import SIP_VERSION
import sys

print('QT Version="{}"'.format(QtCore.QT_VERSION_STR))
print('PYQT Version="{}"'.format(Qt.PYQT_VERSION_STR))
print('sip Version="{}"'.format(SIP_VERSION))

class LayerItem(QtGui.QStandardItem):

    def __iter__(self):
        for row in range(self.rowCount()):
            yield self.child(row)

app = QtWidgets.QApplication([])

model = QtGui.QStandardItemModel()
li = LayerItem('Layer Item')
print('li text="{}"'.format(li.text()))
model.appendRow(QtGui.QStandardItem('Standard Item'))

tree = QtWidgets.QTreeView()


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20161025/002c8e62/attachment.html>

More information about the PyQt mailing list