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的主要内容,如果未能解决你的问题,请参考以下文章