我试图编写一个(目前非常)简单的PyQt应用程序,并希望允许用户使用箭头键导航,而不是单击按钮。
我已经实现了基本功能,在我的mainQWidget
中,我覆盖了keyPressEvent
,现在,我只要求它发出警报(QMessageBox.information(self, "Hey", "pressed:{}".format(event), QMessageBox.Ok)
)。
这对于标准的ASCII键(如字母和Enter键)非常有效,但是当我按下箭头键时,它完全被忽略了,我一辈子都搞不懂为什么。
部分原因是我在一台没有数字键盘的笔记本电脑上(这是一台惠普电脑,标准的常规ASCII键盘,四个箭头键夹在右移键下面,没有数字键盘),所以我想知道键盘是否还有其他问题。
有什么建议或帮助吗?如果需要,我可以发布代码,但是由于keyPressEvent
对其他键都有效,所以我不确定它会添加什么。
网友
如果你不想把焦点放在孩子的小部件上。如果只需要main
QWidget
,请设置Children No Focus策略例如,希望是帮助
QWidget.setFocusPolicy (self, Qt.FocusPolicy policy) Reference
FocusPolicy ENUM Reference
小部件中的当前光标,按下键时生效。
案例1:Pure
QWidget
:这个案例中,它可以跟踪所有的键,因为focus selfQWidget
。案例2:在
QWidget
中添加按钮:此案例无法跟踪箭头键,因为它的焦点按钮和箭头键已被设置新的焦点位置使用。(如果在linux中使用样式窗口,则可以看到焦点网格线)我不知道PyQt返回箭头键的ASCII是什么,但您可以避免。在pyQt中有
QtCore.Qt.Key
枚举,可以读取类引用示例:
另请参见:Qt.Key ENUM Reference