【问题标题】:pyqt5 QTableWidget delete the row only when the whole row is selectedpyqt5 QTableWidget 仅在选择整行时删除行
【发布时间】: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 之前验证是否选择了整行。
  • 如何验证整行是否被选中?
  • 这是你要完成的调查部分。 Stackoverflow 不是让社区为您搜索 Google 的最佳场所。

标签: python pyqt5 qtablewidget


【解决方案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'
猜你喜欢
  • 2023-03-29
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 2020-04-27
  • 2023-03-12
相关资源
最近更新 更多