首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QAbstractTableModel tableView中输入作为QAbstractTableModel tableView的行为

在QAbstractTableModel tableView中输入作为QAbstractTableModel tableView的行为
EN

Stack Overflow用户
提问于 2019-09-24 23:02:00
回答 1查看 275关注 0票数 1

我在PyQt5和Qt设计器中使用一个PyQt5来创建数据表。我需要一点帮助才能找到一种简单的方法,使"Enter“keyPressEvent向下移动,就像按下Key_Down按钮一样。下面的代码捕获Enter键按下事件。如何使它移动光标?

我已经搜索了论坛和谷歌这个问题,但我还没有找到解决办法。我尝试过创建一个自定义事件来传递它,而不是“ev”,但这是行不通的。

代码语言:javascript
复制
def keyPressEvent(self, ev):        
    if ev.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
        print("Enter key pressed")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-24 23:34:01

您必须让新的QModelIndex使用moveCursor()方法,并使用selectionModel()setCurrentIndex()方法设置新的选择。

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets


class TableView(QtWidgets.QTableView):
    def keyPressEvent(self, event):
        if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
            index = self.moveCursor(
                QtWidgets.QAbstractItemView.MoveDown, QtCore.Qt.NoModifier
            )
            command = self.selectionCommand(index, event)
            self.selectionModel().setCurrentIndex(index, command)
        else:
            super(TableView, self).keyPressEvent(event)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    model = QtGui.QStandardItemModel(10, 4)
    w = TableView()
    w.setModel(model)
    w.show()

    sys.exit(app.exec_())

如果您使用的是Qt设计器,那么有两种可能的实现:

Designer.

  • Implement
  1. 促进在Qt
  2. 中使用的QTableView使用eventFilter.

在本例中,我将展示如何实现第二个方法:

代码语言:javascript
复制
class EventFilter(QtCore.QObject):
    def __init__(self, view):
        super(EventFilter, self).__init__(view)
        if not isinstance(view, QtWidgets.QAbstractItemView):
            raise TypeError("{} must be a QAbstractItemView".format(view))
        self._view = view
        self._view.installEventFilter(self)

    def eventFilter(self, obj, event):
        if obj is self._view and event.type() == QtCore.QEvent.KeyPress:
            if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
                index = self._view.moveCursor(
                    QtWidgets.QAbstractItemView.MoveDown, QtCore.Qt.NoModifier
                )
                command = self._view.selectionCommand(index, event)
                self._view.selectionModel().setCurrentIndex(index, command)
        return super(EventFilter, self).eventFilter(obj, event)

然后在您的QTableView中设置它:

代码语言:javascript
复制
event_filter = EventFilter(self.tableView)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58089121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档