PyQT5 不会为俄罗斯布局调用 keyPressedEvent

Posted

技术标签:

【中文标题】PyQT5 不会为俄罗斯布局调用 keyPressedEvent【英文标题】:PyQT5 doesn't call keyPressedEvent for Russian layout 【发布时间】:2017-10-22 07:29:38 【问题描述】:

所以,我正在编写一个简单的CHIP8 模拟器。它显然需要一些关键输入。问题是,在启动应用程序时,系统语言会自动从英语变为俄语,并且应用程序停止响应带有字母的键(数字工作正常)。

如何改变这种行为?也许,在下面的字典中添加更多键会有所帮助,但我可以在 PyQT 中找到有关俄语键的任何信息。还是有一些功能,比如sys.change_system_language

这里有一段代码,负责按键映射

KEYBOARD = 
    Qt.Key_1: 1,
    Qt.Key_2: 2,
    Qt.Key_3: 3,
    Qt.Key_4: 4,
    Qt.Key_5: 5,
    Qt.Key_6: 6,
    Qt.Key_7: 7,
    Qt.Key_8: 8,
    Qt.Key_9: 9,
    Qt.Key_0: 0,
    Qt.Key_A: 10,
    Qt.Key_B: 11,
    Qt.Key_C: 12,
    Qt.Key_D: 13,
    Qt.Key_E: 14,
    Qt.Key_F: 15,

这是主窗口:

class GameWindow(QMainWindow):
    def __init__(self, rom, parent=None):
        super().__init__(parent)    
        self.game = CHIP8()
        # more code here    

    def keyPressEvent(self, e):
        if e.key() in KEYBOARD:
            self.game.key_pressed = KEYBOARD[e.key()]

【问题讨论】:

你为什么不使用pyhook? 【参考方案1】:

问题在于,虽然字母“Q”和“Й”在同一个按钮上,但它们的数值不同。因此,为了使一切正常,我需要添加 16 个新的键值对(通过为每个键调用 print(e.key()) 来获取所有俄语按钮的值)。但我只是将键盘默认语言切换为英语:)

【讨论】:

以上是关于PyQT5 不会为俄罗斯布局调用 keyPressedEvent的主要内容,如果未能解决你的问题,请参考以下文章

《PyQT5软件开发 - 基础篇》第3章 PyQt5布局管理

PyQt5之俄罗斯方块

在小部件 PyQt5 上设置布局后更改布局

当我按下一个键时没有调用 keyPressed() 方法?

PyQt5调用子窗口

PyQt5对话框窗口打开时没有布局