Pyqt5 QTableWidget自定义键盘函数
Pyqt5 QTableWidget custom keyboard functions
我正在使用 pyqt5 制作一个 table 用户需要向其中添加一些信息:
self.table = QTableWidget(Dialog)
self.table.setGeometry(QtCore.QRect(30, 100, 650, 380))
self.tableItem = QTableWidgetItem()
然后我使用 setItem 方法将信息添加到 table。
用户可以通过左、右、下、右键导航到 table 的不同单元格。当用户按下Tab键时,功能与右键基本相同。
但是,我希望 Tab 键向下而不是向右。
如果有人可以指导我阅读文档中的正确章节或帮助我入门的示例,那将是一个很大的帮助。
谢谢!
一个可能的解决方案是拦截按下 Tab 键的事件并阻止它使用 eventFilter()
传播,并相信按键事件发送向下键:
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 制作一个 table 用户需要向其中添加一些信息:
self.table = QTableWidget(Dialog)
self.table.setGeometry(QtCore.QRect(30, 100, 650, 380))
self.tableItem = QTableWidgetItem()
然后我使用 setItem 方法将信息添加到 table。
用户可以通过左、右、下、右键导航到 table 的不同单元格。当用户按下Tab键时,功能与右键基本相同。
但是,我希望 Tab 键向下而不是向右。 如果有人可以指导我阅读文档中的正确章节或帮助我入门的示例,那将是一个很大的帮助。
谢谢!
一个可能的解决方案是拦截按下 Tab 键的事件并阻止它使用 eventFilter()
传播,并相信按键事件发送向下键:
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_())