python - 我们如何通过 Down_arrow 将焦点从 QLineEdit 更改为 QListWidget?
问题描述
在 PyQt5 中,如果我从 QLineEdit 按向下箭头,如何将焦点从 QLineEdit 更改为 QListWidget?反之亦然
解决方案
最简单的解决方案是获取键盘事件,或者通过子类化行编辑并覆盖,keyPressEvent
或者使用事件过滤器,如果键事件是Qt.Key_Down
.
子类化
在这种情况下,我们使用一个子类和一个自定义信号,每当按下向下键时,它就会发出信号,该信号连接到setFocus()
主类中。
class DownKeyEdit(QtWidgets.QLineEdit):
downKeyPressed = QtCore.pyqtSignal()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Down:
self.downKeyPressed.emit()
event.accept()
else:
super().keyPressEvent(event)
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
self.lineEdit = DownKeyEdit()
layout.addWidget(self.lineEdit)
self.listWidget = QtWidgets.QListWidget()
layout.addWidget(self.listWidget)
self.listWidget.addItems(['Item {}'.format(i + 1) for i in range(10)])
self.lineEdit.downKeyPressed.connect(self.listWidget.setFocus)
事件过滤
使用事件过滤器可以避免不必要的子类化,因为我们只在这种特定情况下需要它。我们过滤键事件并检查键是否正确,然后相应地设置焦点。
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
self.lineEdit = QtWidgets.QLineEdit()
layout.addWidget(self.lineEdit)
self.listWidget = QtWidgets.QListWidget()
layout.addWidget(self.listWidget)
self.listWidget.addItems(['Item {}'.format(i + 1) for i in range(10)])
self.lineEdit.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.KeyPress and event.key() == QtCore.Qt.Key_Down:
self.listWidget.setFocus()
event.accept()
return super().eventFilter(source, event)
请注意,在这两种情况下,我都没有考虑 QCompleter 的可能性,它使用箭头键来选择可能的完成。
推荐阅读
- mysql - SELECT 查询,其中 LIMIT 是重复键的不同计数
- elasticsearch - 我想用我自己的证书替换搜索保护演示证书
- javascript - 在 axios 的标头中发送令牌时获取 500 错误代码和跨源
- java - 转换为二进制 Java 类时的 Jasmin NoSuchMethodError
- xml - 当我尝试将 xsd 附加到 xml 时,xml 的根变为红色(在 Intellij IDEA 中),这可能是什么问题?
- c# - 带有 UDP 的 net.core 的 log4net 配置文件动态附加远程端口
- database - 使用 powerbi 在单个 dateTime 过滤器上过滤多个表
- crystal-reports - 隐藏 Crystal Reports 特定详细信息
- android-studio - Android Studio 不记录 Robo 测试
- google-apps-script - 从 if 语句调用 Google Script 函数