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
相关产品推荐
相关产品推荐

