pyqt5 QTableWidget 仅在选择整行时删除行

Posted

技术标签:

【中文标题】pyqt5 QTableWidget 仅在选择整行时删除行【英文标题】:pyqt5 QTableWidget delete the row only when the whole row is selected 【发布时间】:2020-07-21 05:45:36 【问题描述】:

我正在编写一个分析 CSV 文件的 GUI,并且我想实现一个功能,其中只有在选择整行时才会删除该行。我当前的问题是当我选择一个单元格并按退格键时,所选单元格所在的行也将被删除。如何防止这种情况发生?

from GUI import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import Qt
from PyQt5.QtCore import QItemSelectionModel
from PyQt5.QtWidgets import (QApplication,QMainWindow,QFileDialog,QTableWidget,
                             QMessageBox,QTableWidgetItem,QHeaderView)

class mainForm(QMainWindow,Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
        self.initUI()

     def keyPressEvent(self, event):
        if event.key() == Qt.Key_Backspace:
            self.removeRow()
    
     def selectedRow(self):
        if self.tabWidget.currentIndex() is 0 and self.inLoanTable.selectionModel().hasSelection():
            row = self.inLoanTable.selectionModel().selectedIndexes()[0].row()
            return int(row)

     def removeRow(self):
        if self.tabWidget.currentIndex() is 0 and self.inLoanTable.rowCount() > 0:
            row = self.selectedRow()

【问题讨论】:

然后在 keyPressEvents 添加更多 if 在调用 removeRow 之前验证是否选择了整行。 如何验证整行是否被选中? 这是你要完成的调查部分。 *** 不是让社区为您搜索 Google 的最佳场所。 【参考方案1】:

我确实在我的代码中这样做了。它在按下按钮时运行。你可以用退格键绑定它。

def deleteItem(self):
   model_index = self.tableWidget.selectionModel().selectedRows()
   index = QtCore.QPersistentModelIndex(model_index)
   self.tableWidget.remoweRow(index.row())

如果你想删除多行,你也可以这样做。

def deleteItem(self):
   index_list = []
   for model_index in self.tableWidget.selectionModel().selectedRows()
       index = QtCore.QPersistentModelIndex(model_index)
       index_list.append(index)
   for index in index_list:
       self.tableWidget.remoweRow(index.row())

【讨论】:

谢谢,但它给了我一个错误:AttributeError: 'builtin_function_or_method' object has no attribute 'selectedRows' 对不起应该是 selectionModel().selectedRows() 试试吧 文件“/Users/yayuni/Desktop/HerbariumGUI/main.py”,第 287 行,在 testDRow index = QtCore.QPersistentModelIndex(modelIndex) TypeError:参数不匹配任何重载调用:QPersistentModelIndex() : 参数太多 QPersistentModelIndex(QModelIndex): 参数 1 有意外类型 'list' QPersistentModelIndex(QPersistentModelIndex): 参数 1 有意外类型 'list'

以上是关于pyqt5 QTableWidget 仅在选择整行时删除行的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 QTableWidget:右键选择列,并在上下文菜单中显示删除条目

得到选择行pyqt5 qtablewidget

如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)

Qtablewidget 去除黑色空间 PyQt5

如何使用 PYQT5 使 QTableWidget 单元格只读?

PyQt5-高级控件使用(QTableWidget)