【问题标题】:PyQt example editabletreemodel.py crashes when the last row is removedPyQt 示例 editabletreemodel.py 在删除最后一行时崩溃
【发布时间】:2015-09-15 07:36:10
【问题描述】:

editabletreemodel.py 示例(来自 PyQt examples/itemviews 文件夹)中,我注意到当最后一行被删除时(例如,读取 'Connection编辑模式'或之后的任何其他模式)应用程序崩溃

'IndexError: list index out of range'.

这可能是因为该示例在创建索引等时保留了 TreeItem 对象而不是 id?我有非常相似的问题,只是想知道保留 id 而不是对象是否更好?或者检查是否请求超出限制的行是安全的,如下所示:

def child(self, row):
    if row >= self.childCount():
        return None

    return self.childItems[row]

我使用 Python 版本 2.7.9 和 PyQt 版本“4.9.6”。

提前致谢。

【问题讨论】:

    标签: python pyqt qtreeview qabstractitemmodel


    【解决方案1】:

    这应该在pyqt mailing-list 上报告为错误。

    原始Qt example 并声明childItems 为:

    QList<TreeItem*> childItems;
    

    并将child() 函数定义为:

    TreeItem *TreeItem::child(int number)
    {
        return childItems.value(number);
    }
    

    这不会做任何明确的边界检查,因为如果number 超出边界,value() 将简单地返回 null。但显然 python 列表的行为方式不同,因此需要明确的边界检查:

    def child(self, row):
        if 0 <= row < self.childCount():    
            return self.childItems[row]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多