【问题标题】:PyQt QTableView - Capture KeyDown / KeyPress EventPyQt QTableView - 捕获 KeyDown / KeyPress 事件
【发布时间】:2018-08-13 13:16:23
【问题描述】:

我想在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,我想修改当前选中的行。

QTableView 有这个方法 keyPressEvent 需要一个 QKeyEvent - 我如何获得这个事件?

【问题讨论】:

  • 你能发布更多代码吗?

标签: python pyqt pyqt5 qtableview qkeyevent


【解决方案1】:

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

  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")

【讨论】:

  • 非常感谢!这正是我想要的。
  • 需要在def someSlot(self):上方加pyqtSlot吗?
  • @Jason 建议使用@pyqtSlot,但不是强制性的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2023-03-23
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
相关资源
最近更新 更多