Pyqt5 QTableWidget自定义键盘功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyqt5 QTableWidget自定义键盘功能相关的知识,希望对你有一定的参考价值。

我使用pyqt5创建一个用户需要添加一些信息的表:

self.table = QTableWidget(Dialog)
self.table.setGeometry(QtCore.QRect(30, 100, 650, 380))
self.tableItem = QTableWidgetItem()

然后我使用setItem方法向表中添加信息。

用户可以通过左,右,下和右键导航到表格的不同单元格。当用户按Tab键时,该功能与右键基本相同。

但是,我希望tab键向下而不是向右键。如果有人可以指导我阅读文档中的正确章节或示例以帮助我入门,那将是一个很大的帮助。

谢谢!

答案

一种可能的解决方案是拦截按下Tab键的事件并防止它使用eventFilter()传播,并且相信一个键事件发送Down键:

from PyQt5 import QtCore, QtGui, QtWidgets

class Helper(QtCore.QObject):
    def __init__(self, parent=None):
        super(Helper, self).__init__(parent)
        self.m_widgets = []

    def appendWidget(self, widget):
        self.m_widgets.append(widget)
        widget.installEventFilter(self)

    def eventFilter(self, obj, event):
        if obj in self.m_widgets and event.type() == QtCore.QEvent.KeyPress:
            if event.key() == QtCore.Qt.Key_Tab:
                # create new event
                new_event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, 
                    QtCore.Qt.Key_Down, 
                    QtCore.Qt.NoModifier)
                # send new event
                QtCore.QCoreApplication.postEvent(obj, new_event)
                # if True, the event is discarded
                return True
        return super(Helper, self).eventFilter(obj, event)


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.table = QtWidgets.QTableWidget(4, 4)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.table)

        helper = Helper(self)
        helper.appendWidget(self.table)


if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

以上是关于Pyqt5 QTableWidget自定义键盘功能的主要内容,如果未能解决你的问题,请参考以下文章

单击qTableWidget pyqt5中的特定单元格后,特定单元格的背景颜色没有改变

python pyqt5 QTableWidget 设置表头

为自定义模型使用 QTableWidget 的排序功能

pyqt5 QTableWidget 仅在选择整行时删除行

QTableWidget 中的自定义排序

Qtablewidget 去除黑色空间 PyQt5