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

QTableView多行删除异常及相关功能优化技术咨询

完整修改后的test.py代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
from PyQt5 import uic, QtWidgets
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QDialog, QComboBox, QApplication, QHeaderView, QShortcut
from PyQt5.QtCore import Qt

class GUI(QDialog):
    def __init__(self):
        super(GUI, self).__init__()
        dirname = os.path.dirname(os.path.abspath(__file__))
        uic.loadUi(os.path.join(dirname,'main.ui'), self)
        # buttons
        self.btnPopulate.clicked.connect(self.populate)
        self.btnDelete.clicked.connect(self.delete)
        # 绑定DEL和BACKSPACE键到删除方法
        QShortcut(Qt.Key_Delete, self, self.delete)
        QShortcut(Qt.Key_Backspace, self, self.delete)
        # table model
        self.header = ['col1', 'col2', 'col3']
        self.QSModel = QStandardItemModel()
        self.QSModel.setColumnCount(3)
        self.QSModel.setHorizontalHeaderLabels(self.header)
        self.tableView.setModel(self.QSModel)
        self.tableView.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)

    def populate(self):
        row = self.QSModel.rowCount()
        for x in range(7):
            self.QSModel.insertRow(row)
            self.QSModel.setData(self.QSModel.index(row, 0), 'data' + str(x))
            self.QSModel.item(row, 0).setEditable(True)
            self.QSModel.setData(self.QSModel.index(row, 1), 'data' + str(x))
            self.QSModel.item(row, 1).setEditable(True)
            self.QSModel.setData(self.QSModel.index(row, 2), 'data' + str(x))
            self.QSModel.item(row, 2).setEditable(True)  # 修正了原代码中列索引错误

    def delete(self):
        selection_model = self.tableView.selectionModel()
        if selection_model.hasSelection():
            indexes = selection_model.selectedRows()
            selected_rows = [idx.row() for idx in indexes]
            # 倒序删除行
            for row in sorted(selected_rows, reverse=True):
                print('Deleting row %d...' % row)
                self.QSModel.removeRow(row)
            
            # 自动选中下一行
            target_row = min(selected_rows)
            total_rows = self.QSModel.rowCount()
            if total_rows > 0:
                target_row = min(target_row, total_rows - 1)
                self.tableView.selectRow(target_row)
        else:
            print('No row selected!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GUI()
    window.show()
    sys.exit(app.exec_())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:30:55