[PyQt] PyQt instances as method defaults eval to bool
Hans-Peter Jansen
hpj at urpla.net
Mon Oct 18 15:14:50 BST 2010
Hi Phil,
current sip and PyQt show some issues with PyQt instances, that are used
as method defaults, e.g. the usual "parent = QtCore.QModelIndex()" in
Qt's model/view paradigm.
Run the itemviews/editabletreemodel.py example, select an item, and try
to insert or remove a column. Results in traceback:
Traceback (most recent call last):
File "./editabletreemodel.py", line 340, in insertColumn
changed = model.insertColumn(column + 1, parent)
TypeError: QAbstractItemModel.insertColumn(int, QModelIndex parent=QModelIndex()):
argument 2 has unexpected type 'bool'
Traceback (most recent call last):
File "./editabletreemodel.py", line 367, in removeColumn
changed = model.removeColumn(column, parent)
TypeError: QAbstractItemModel.removeColumn(int, QModelIndex parent=QModelIndex()):
argument 2 has unexpected type 'bool'
For some reason, the parent args in:
def insertColumn(self, parent=QtCore.QModelIndex()):
def removeColumn(self, parent=QtCore.QModelIndex()):
evaluate to bool, but should resolve to PyQt4.QtCore.QModelIndex
instances of course. I know, that there are common Python pitfalls,
where mutable types as default arguments results in mostly unexpected
behaviour, but that should not be the case here.
In this context, I noticed, that some examples return None instead of
QVariant(), which is related to:
sip.setapi('QVariant', 2)
But this very setting leads to:
Traceback (most recent call last):
File "./editabletreemodel.py", line 327, in insertChild
if not model.headerData(column, QtCore.Qt.Horizontal).isValid():
AttributeError: 'str' object has no attribute 'isValid'
when trying insert a child. Just removing .isValid() in line 327
if not model.headerData(column, QtCore.Qt.Horizontal).isValid():
should be sufficient to fix this issue.
Pete
More information about the PyQt
mailing list