You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中QStandardItemModel批量删除选中行索引越界问题求解

解决Qt列表选中项删除的索引越界问题

原代码的问题在于正向遍历列表时删除元素:每删除一个元素,后续元素的索引会自动前移,但循环仍按初始的rowCount()递增,这会导致跳过部分待检查元素,甚至触发索引越界。

正确的做法是从后往前遍历索引,这样删除当前元素不会影响尚未遍历的(更靠前的)元素的索引位置:

def delete_selected_accounts(self):
    # 从最后一行开始反向遍历
    for i in range(self.model.rowCount() - 1, -1, -1):
        if self.model.item(i).checkState() == Qt.Checked:
            self.model.removeRow(i)
            self.account_list.pop(i)

原理说明

  • 反向遍历从最大索引开始,逐步递减到0。删除索引i的元素时,只有索引小于i的元素会前移,但这些元素还没被遍历到,不会干扰循环的正确性。
  • 操作时要确保self.model和self.account_list的修改同步,避免出现数据不一致的问题。

内容的提问来源于stack exchange,提问作者themmfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:35:21