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:右键选择列,并在上下文菜单中显示删除条目
如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)