【问题标题】:Pyqt5 QTableWidget custom keyboard functionsPyqt5 QTableWidget 自定义键盘功能
【发布时间】:2019-02-12 06:19:05
【问题描述】:

我正在使用 pyqt5 制作一个表格,用户需要向其中添加一些信息:

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

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

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

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

谢谢!

【问题讨论】:

    标签: python pyqt keyboard pyqt5 qtablewidget


    【解决方案1】:

    一种可能的解决方案是拦截按下 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_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2020-07-12
      • 2021-10-03
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多