在 editabletreemodel.py 示例中(来自PyQt examples / itemviews 文件夹)我注意到当删除最后一行时(例如,一个读取'连接编辑模式'或之后的任何其他内容)应用程序崩溃
'IndexError:列表索引超出范围'。
这可能是因为该示例在创建索引时保留TreeItem对象,而不是ids?我有类似的问题,只是想知道保持ID而不是对象是否更好?或者可以安全地检查是否要求超出限制的行:
def child(self, row):
if row >= self.childCount():
return None
return self.childItems[row]
我使用Python版本2.7.9和PyQt版本'4.9.6'。
提前致谢。
答案 0 :(得分:0)
这应该报告为pyqt mailing-list上的错误。
原始Qt example并将childItems
声明为:
QList<TreeItem*> childItems;
并将child()
函数定义为:
TreeItem *TreeItem::child(int number)
{
return childItems.value(number);
}
这不会进行任何显式的边界检查,因为如果value()
超出范围,number
将只返回null。但显然python列表的行为方式不同,因此需要进行显式的边界检查:
def child(self, row):
if 0 <= row < self.childCount():
return self.childItems[row]