如何在纯Python中从硬件按键号/扫描码获取实际键名,或者如何将[1]键绑定为Q中的快捷键

2024-09-28 03:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我的最终目标是将[1]键左边的键绑定到pyqt中的快捷键,而不管键盘布局是什么(qwerty、qwertz、azerty…)。这是qt不直接支持的。在

因此,要么我在寻找一种Qt文档中没有提到的方法(或者隐藏在某处),或者更可能的是,在程序启动时,通过将硬件密钥编号转换为当前布局中的实际密钥,在纯python中预处理密钥。在

我可以提供pyqt的实际密钥,或者其他任何不需要知道任何信息的工具箱。在

一把钥匙左边的钥匙有时有编号为“1”的钥匙(见http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix.keyboardtechref%2Fdoc%2Fkybdtech%2FKey.htm)。在

如果我在qt中截获这个键并打印出它的“nativeScanCode”,我得到的结果是“49”。在

总而言之,我更喜欢只使用python的解决方案,但是依赖Qt的解决方案也可以。在

原因: 原因是这是一个非常适合使用的键(关于布局),但高度依赖于语言。在一些键盘语言中,它甚至是一个“死键”,它需要第二个键来创建一个带音调符号的字符。在

如果你想自己测试它,只需把z键和y键与qwerty键和qwertz键结合起来,这是一个比左边键更简单的例子,但原则上它是相同的问题。 目标是一个快捷键,无论是qwertz还是qwerty(顾名思义,这两者的区别在于z和y是颠倒的)


Tags: 密钥原因布局键盘解决方案qtibm快捷键
1条回答
网友
1楼 · 发布于 2024-09-28 03:24:12

如果要实现独立于键盘布局的快捷方式,则需要重新实现小部件的keyPressEvent,并检查keyEvent.nativeScanCode()值。例如,要跟踪在QWERTY中分配给“Z”和在QWERTZ中指定给“Y”的关键点,可以使用以下命令:

class MyWidget(QtGui.QWidget):
      def keyPressEvent(self, event):
          if event.nativeScanCode() == 52:
              print "Pressed!"

注意,重音符是特殊的。在某些布局中,它是一个死键,这就是为什么在某些系统中,keypress事件在按下下一个键之前可能不会出现。见this question。在

QShortCut基于QKeySequence,而QKeySequence不支持本机扫描代码,因此QShortCut不能用于此任务。在

相关问题 更多 >

    热门问题