PyQt QTableView-捕获KeyDown / KeyPress事件

时间:2018-08-13 13:16:24

标签: python pyqt pyqt5 qtableview qkeyevent

我想在Key Down上捕获一个QTableView事件。我还想确定是否是DEL按钮的按下按钮,我的QTableView是这样创建的(来自QtCreator):

self.tblview_data_sources = QtWidgets.QTableView(self.groupBox_2)
self.tblview_data_sources.setGeometry(QtCore.QRect(10, 20, 721, 121))
self.tblview_data_sources.setObjectName("tblview_data_sources")

如果实际上是DEL键,我想删除当前选择的行。

QTableView使用的方法keyPressEvent需要一个QKeyEvent-如何获得此事件?

1 个答案:

答案 0 :(得分:2)

对于您的情况,您有以下可能的解决方案:

  1. keyPressEvent:使用keyPressEvent方法,但是为此,您必须创建一个继承自QTableView的类并覆盖该方法。

class TableView(QtWidgets.QTableView):
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Delete:
            print("DELETE")
        super(TableView, self).keyPressEvent(event)
...

def setupUi(self, SOME):
     ...
     self.tblview_data_sources = TableView(self.groupBox_2) # change QtWidgets.QTableView to TableView
  1. eventFilter:使用eventFilter,为此,您必须使用installEventFilter,但是为此,您的类必须继承自从QObject继承的某个类,如果您使用的是Qt Designer,则该类不是许多行代码,因此我将省略该示例。

  2. QShortcut:而我出于其简单性的首选解决方案是使用QShortcut


    QtWidgets.QShortcut(QtCore.Qt.Key_Delete, self.tblview_data_sources, activated=self.someSlot)
    ...
def someSlot(self):
    print("DELETE")