PyQt QTableView - 捕获 KeyDown / KeyPress 事件
PyQt QTableView - Capture KeyDown / KeyPress Event
我想在 QTableView
上捕获 Key Down
事件。我还想确定,如果它是 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-Keydown,我想 revmove 当前选择的行。
QTableView
有这个方法 keyPressEvent
需要一个 QKeyEvent
- 我如何得到这个事件?
对于您的情况,您有以下可能的解决方案:
- keyPressEvent: 使用 keyPressEvent 方法,但为此您必须创建一个 class 继承自 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
eventFilter: 使用 eventFilter 并且为此你必须使用 installEventFilter 但为此你的 class 必须继承自 QObject 的一些 class ,如果你正在使用Qt Designer class 不是,这也涉及到很多行代码所以我将省略示例。
QShortcut: 为了简单起见,我首选的解决方案是使用 QShortcut
:
QtWidgets.QShortcut(QtCore.Qt.Key_Delete, self.tblview_data_sources, activated=self.someSlot)
...
def someSlot(self):
print("DELETE")
我想在 QTableView
上捕获 Key Down
事件。我还想确定,如果它是 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-Keydown,我想 revmove 当前选择的行。
QTableView
有这个方法 keyPressEvent
需要一个 QKeyEvent
- 我如何得到这个事件?
对于您的情况,您有以下可能的解决方案:
- keyPressEvent: 使用 keyPressEvent 方法,但为此您必须创建一个 class 继承自 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
eventFilter: 使用 eventFilter 并且为此你必须使用 installEventFilter 但为此你的 class 必须继承自 QObject 的一些 class ,如果你正在使用Qt Designer class 不是,这也涉及到很多行代码所以我将省略示例。
QShortcut: 为了简单起见,我首选的解决方案是使用
QShortcut
:
QtWidgets.QShortcut(QtCore.Qt.Key_Delete, self.tblview_data_sources, activated=self.someSlot)
...
def someSlot(self):
print("DELETE")