首页 > 解决方案 > 如何通过点击 QtableWidget 中的删除键来删除一行?

问题描述

我想在不添加按钮的情况下删除我的 Qtablewidget 的一行,只需按键盘 Delete 键即可。我知道,我需要使用关键事件,但不确定如何将偶数分配给特定的表格小部件,并且在 GUI 中有其他选项卡的其他部分中不会激活关键事件(长话短说:关键事件只是专用于特定表)。

按钮删除样式:

for i in rows:
                self.tableWidget.removeRow(i)

尝试关键事件:

QtCore.Qt.Key_Delete
QtGui.QTableWidget.keyPressEvent(...,...)

标签: pythonpyqtpyqt5

解决方案


最简单的方法是继承QTableWidget并实现你自己的keyPressEvent,例如

import sys
from PyQt5 import QtCore, QtWidgets

class Main(QtWidgets.QTableWidget):

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Delete:
            row = self.currentRow()
            self.removeRow(row)
        else:
            super().keyPressEvent(event)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Main()

    main.setColumnCount(3)
    for i in range(4):
        main.insertRow(main.rowCount())
        for j in range(main.columnCount()):
            main.setItem(i, j, QtWidgets.QTableWidgetItem(f'row {i}, column{j}'))
    main.show()
    sys.exit(app.exec_())

推荐阅读