问题描述:

在处理表格中的多选或全选数据时,如果按照从前往后的顺序删除行,会导致索引错误的问题。例如,如果删除第一行,那么后面行的索引都会发生变化。

解决方法:

为了解决这个问题,一种有效的方法是使用倒序遍历,即从后往前删除行。这样可以避免删除行时出现索引错误。通过将索引列表进行倒序排序,可以确保在删除行时按照正确的顺序进行操作。可以通过将sorted()函数的reverse参数设置为True来实现索引列表的倒序排序。这样,删除行的操作就会按照从后往前的顺序进行,避免了索引错误的问题。

代码演示:


def index1_sc(self):
    try:
        rows = self.gl.tableWidget_2.selectedItems()
        row_list = []
        if rows == []:
            pass
        else:
            for row in rows:
                row_list.append(row.row())
            for i in sorted(set(row_list), reverse=True):
                a = self.gl.tableWidget_2.item(i, 1).text()
                sql = "DELETE FROM student_grades WHERE `学号` = %s;" % a
                sql1 = "DELETE FROM student_information WHERE `学号` = %s;" % a
                sql2 = "DELETE FROM users WHERE username = '%s';" % a
                self.yu.execute(sql)
                self.yu.execute(sql1)
                self.yu.execute(sql2)
                self.yu.connection.commit()
                self.gl.tableWidget_2.removeRow(i)
            tkinter.messagebox.showinfo('提示', '删除成功')
    except:
        tkinter.messagebox.showerror('警告', '发生错误')