【问题标题】:QStandardItemModel delete multiple rows without problem - pythonQStandardItemModel 毫无问题地删除多行 - python
【发布时间】:2022-11-23 21:45:56
【问题描述】:

我正在编写一个 reddit 机器人并创建了一个这样的 UI:

我想要做的是用户从列表中选择一个帐户,单击删除所选帐户并从列表中删除所有选中的帐户。所以这是我的代码:

def delete_selected_accounts(self):
    print(len(self.account_list))
    for i in range(self.model.rowCount()):

        if self.model.item(i).checkState() == Qt.Checked:
            self.model.removeRow(i)
            self.account_list.pop(i)

但是,此代码无法按预期工作。当我从模型中删除行或从帐户列表中弹出时,列表计数发生变化,我遇到了列表超出范围的问题。如果没有这个问题,我该怎么做才能删除选定的项目?

【问题讨论】:

    标签: python qt


    【解决方案1】:

    呵呵,我昨天回复了一个similar question。

    您正在迭代 N 行(N 是原始行数),但在此过程中,您删除了一些行。结果?最终您将尝试访问 self.model.item(N - 1),这将超出范围。

    解决这个问题的一种方法是从后面迭代(从N - 1 到0),这样删除的行就不会影响以后的行。

    for i in range(self.model.rowCount())[::-1]:
        ...
    

    在这里,[::-1] 告诉range 生成反向范围。你可以像这样明确地写出来:range(self.model.rowCount() - 1, -1, -1)。但它看起来有点难看。

    【讨论】:

    • 这实际上是一个天才的解决方案大声笑。谢谢您的帮助
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2016-11-28
    相关资源
    最近更新 更多