I'm an idiot. It wasn't the rowsAboutToBeRemoved method of the model that was the problem. It was the rowsAboutToBeRemoved method in one of my QAbstractItemView subclasses. I was missing the 'self' reference in the arguments lists.
Duh! Oh boy, did that take some tracking down. If I'd had an indication of which class the object having the problem belonged to, that would have been a huge help. Any ideas how I could determine that? Simon On 14 July 2010 08:25, Simon Hibbs <[email protected]> wrote: > The method implementation looks like this: > > def removeRows(self, position, rows=1, index=QModelIndex()): > # problem on next line, which raises rowsAboutToBeRemoved signal > self.beginRemoveRows(QModelIndex(), position, position + rows - 1) > self.units = self.units[:position] + \ > self.units[position + rows:] > self.endRemoveRows() > self.dirty = True > return True > > The error is: > > TypeError: rowsAboutToBeRemoved() takes exactly 3 arguments (4 given) > > The code is identical to the example in the Rapid GUI Programming > book. In fact the example code from the book I downloaded works and > mine doesn't on the same box, but I can't for the life of me see why. > I have also upgraded from PyQt 4.6.1 to 4.7.4 and still have the > problem. > > I think I can guess what is happening. Python adds an implicit self > reference as the first argument to any method call, hence 4 arguments > not three, but rowsAboutToBeRemoved lives in C++ land so doesn't know > what to do with the self reference. However how come the example code > works and mine doesn't? I know you can't answer that, but has anyone > seen anything like this before? Any debugging tricks I can use to get > more information on the problem? If I print the beginRemoveRows > arguments there are only 3 of them, a QModelIndex object reference and > two integers. > > I suppose if the beginRemoveRows invocation is correct, and I'm sure > it is, it must be something to do with argument passing between PyQt > and C++. There's a note in the Riverbank docs for QAbstractItemModel > constructor that says: > > "The parent argument, if not None, causes self to be owned by Qt > instead of PyQt." > > I tried setting parent=None but the book example code doesn't do that > and it didn't make any difference anyway. Is there anything I can do, > any instrumentation I can put into the app that might give more info > on the issue? > > Best regards, > > Simon Hibbs > _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
