We're seeing a change in behavior in the latest PyQt4. We have a custom QStandardItemModel with custom QStandardItems. It is being used by a QTreeView.
When calling tree.invisibleRootItem().child(i) we are getting back QtGui.QStandardItem instances instead of our custom classes. This seemed related to a previous problem (but this one is different): http://thread.gmane.org/gmane.comp.python.pyqt-pykde/25027/focus=25028 We are using the latest sip (4.14.6) and PyQt4 (4.10.1). Qt is version 4.8.2 (version-locked due to a 3rd-party dependency). We're on RHEL 6.4, Python 2.6.6. I've pasted our test case below. Older versions of PyQt4 would print the Python object (PPNavigationItem) instead of QtGui.QStandardItem when clicking on the items. This seems like a bug. Is there anything else we can do to help? Your help is very much appreciated. --- >8 --- test.py --- >8 --- #!/usr/bin/env python import sys from PyQt4 import QtGui class PPNavigationItem(QtGui.QStandardItem): def __init__(self, name=None): QtGui.QStandardItem.__init__(self) if name is None: self.setText("None") else: self.setText(name) class PPNavigationModel(QtGui.QStandardItemModel): def __init__(self, parent=None): QtGui.QStandardItemModel.__init__(self) def initializeAll(self): self.clear() parentItem = self.invisibleRootItem() for name in ["abc", "def", "ghi"]: item = PPNavigationItem(name) parentItem.appendRow(item) class PPNavigationTree(QtGui.QTreeView): def __init__(self, parent = None): QtGui.QTreeView.__init__(self) self.setAllColumnsShowFocus(True) self.header().hide() class PPNavigationWidget(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self) self.buildWidget() def buildWidget(self): mainLayout = QtGui.QVBoxLayout() self.setLayout(mainLayout) # set up view/model self.view = PPNavigationTree(self) self.model = PPNavigationModel(self) self.model.initializeAll() self.view.setModel(self.model) mainLayout.addWidget(QtGui.QLabel("Click on item")) mainLayout.addWidget(self.view) self.view.clicked.connect(self.foo) def foo(self, index): root = self.model.invisibleRootItem() for i in range(root.rowCount()): item = root.child(i) if not item: continue print item if __name__ == "__main__": app = QtGui.QApplication(sys.argv) widget = PPNavigationWidget() widget.show() sys.exit(app.exec_()) _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt