Python 在QAbstractTableModel tableView中,让enter键作为键向下运行

Python 在QAbstractTableModel tableView中,让enter键作为键向下运行,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我正在使用PyQt5中的QabStretctTableModel和Qt设计器创建数据表。我需要一些帮助来找到一种简单的方法,使“回车”按键事件在桌子上向下移动,就好像按下了“向下”键一样。以下代码捕获Enter键按下事件。如何使其移动光标 我已经搜索了论坛并用谷歌搜索了这个问题,但我还没有找到解决方案。我曾尝试创建一个自定义事件来代替“ev”,但没有成功 def按键事件(自身,ev): 如果ev.key()输入(QtCore.Qt.key\u返回,QtCore.Qt.key\u输入): 打印(“

我正在使用PyQt5中的QabStretctTableModel和Qt设计器创建数据表。我需要一些帮助来找到一种简单的方法,使“回车”按键事件在桌子上向下移动,就好像按下了“向下”键一样。以下代码捕获Enter键按下事件。如何使其移动光标

我已经搜索了论坛并用谷歌搜索了这个问题,但我还没有找到解决方案。我曾尝试创建一个自定义事件来代替“ev”,但没有成功

def按键事件(自身,ev):
如果ev.key()输入(QtCore.Qt.key\u返回,QtCore.Qt.key\u输入):
打印(“按回车键”)

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

从PyQt5导入QtCore、QtGui、qtwidget
类TableView(QtWidgets.QTableView):
def按键事件(自身,事件):
如果event.key()在(QtCore.Qt.key_返回,QtCore.Qt.key_输入):
索引=self.moveCursor(
qtwidts.qabstractemview.MoveDown,QtCore.Qt.NoModifier
)
command=self.selectionCommand(索引、事件)
self.selectionModel().setCurrentIndex(索引,命令)
其他:
超级(表格视图,自我)。按键事件(事件)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
model=QtGui.QStandardItemModel(10,4)
w=表视图()
w、 setModel(model)
w、 show()
sys.exit(app.exec_())
如果您使用的是Qt Designer,则有两种可能的实现:

  • 升级Qt设计器中使用的QTableView

  • 使用eventFilter实现逻辑

  • 在本例中,我将演示如何实现第二种方法:

    类事件过滤器(QtCore.QObject):
    定义初始化(自,视图):
    超级(EventFilter,self)。\u初始化\u(视图)
    如果不是isinstance(视图,qtwidts.QAbstractItemView):
    raise TypeError(“{}必须是QAbstractItemView.”格式(视图))
    self.\u view=视图
    self.\u view.installEventFilter(self)
    def事件过滤器(自身、obj、事件):
    如果obj是self.\u view and event.type()==QtCore.QEvent.KeyPress:
    如果event.key()在(QtCore.Qt.key_返回,QtCore.Qt.key_输入):
    index=self.\u view.moveCursor(
    qtwidts.qabstractemview.MoveDown,QtCore.Qt.NoModifier
    )
    command=self.\u view.selectionCommand(索引、事件)
    self._view.selectionModel().setCurrentIndex(索引,命令)
    返回super(EventFilter,self).EventFilter(obj,event)
    
    然后在QTableView中进行设置:

    event\u filter=EventFilter(self.tableView)