Right. Thanks for pointing out that I still need to explicitly pass "self."

I'm still not getting checkboxes displayed in the tree widget, though. I believe the problem is in the nested return value in the model's data() method.

The C++ example code I'm following uses a QMap data structure to hold checkState values. After reading Assistant notes, a python dir(QtCore), and some googling, I've found that QMap is not implemented in PyQt. So I'm using a Dict instead. Still, my app complains:

        TypeError: invalid result type from DirModel.data()


Here's the C++ code I'm following:

virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
    {
        if (role == Qt::CheckStateRole && index.column() == 0) {
return checkstates.value(fileInfo(index).absoluteFilePath(), Qt::Unchecked);
        }
        return QDirModel::data(index, role);
    }

private:
    QMap<QString, Qt::CheckState> checkstates;
};




Here's my code:

class DirModel(QtGui.QDirModel):
        def __init__(self, parent=None):
                QtGui.QDirModel.__init__(self, parent)

                self.checkstates = {}

        def data(self, index, role=QtCore.Qt.DisplayRole):
                if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
self.checkstates[self.fileInfo(index).absoluteFilePath()] = QtCore.Qt.Checked return self.checkstates[self.fileInfo(index).absoluteFilePath()] # <-- problem???
                
                return QtGui.QDirModel.data(self, index, role)



Thanks in advance for your suggestions!
Scott




On Jul 9, 2008, at 11:36 PM, Phil Thompson wrote:

On Wed, 9 Jul 2008 22:39:27 -0700, Scott Frankel <[EMAIL PROTECTED] >
wrote:

Hello,

I just joined this list and am new to PyQt (and Qt). I've scanned the
archives, but I'm not sure even what I'm looking for to answer my
question.

I'm looking over some C++ code, trying to rewrite it in Python.  (My
Spanish is much better than my C++!)  I'm sub-classing and extending
QDirModel and getting the following error:

        TypeError: first argument of unbound method QDirModel.data() must be
a QDirModel instance

The C++ methods are:

    virtual QVariant data(const QModelIndex &index, int role =
Qt::DisplayRole) const
    {
        if (role == Qt::CheckStateRole && index.column() == 0) {
            return
checkstates.value(fileInfo(index).absoluteFilePath(), Qt::Unchecked);
        }
        return QDirModel::data(index, role);
    }


My translation so far looks like this:


[ ... ]
class DirModel(QtGui.QDirModel):
        def data(self, index, role=QtCore.Qt.DisplayRole):
                if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
                        return 
checkstates.value(fileInfo(index).absoluteFilePath(),
QtCore.Qt.Unchecked)
                return QtGui.QDirModel.data(index, role)
[ ... ]


Not sure how to make the first argument (index or self?) be a
QDirModel instance.  Ultimately I'm hoping for a directory tree with
check boxes.

Suggestions?

When using an unbound method (including __init__()) you must explicitly
pass self. So...

   return QtGui.QDirModel.data(self, index, role)

Phil



Scott Frankel
President/VFX Supervisor
Circle-S Studios
510-339-7477 (o)
510-332-2990 (c)




_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to