2

我的最终目标是将 [1] 键左侧的键绑定到 pyqt 中的快捷方式,无论是什么键盘布局(qwerty、qwertz、azerty...)。qt 不直接支持。

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

然后我可以给 pyqt 或任何其他不需要知道任何东西的工具包的实际密钥。

一键左侧的键有时具有键号“1”(请参阅​​ http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix。键盘技术参考%2Fdoc%2Fkybdtech%2FKey.htm)。

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

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

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

如果您想自己测试它,只需使用带有 qwerty 和 qwertz 的 z 和 y 键,这是比左键更简单的示例,但原则上这是同一个问题。目标是始终由键盘左下角的键触发的快捷方式,无论是qwertz还是qwerty(顾名思义,这两者的区别在于z和y颠倒了)

4

1 回答 1

1

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

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

请注意,重音键是特殊的。在某些布局中,它是一个死键,这就是为什么在某些系统中 keyPressEvent 在按下下一个键之前可能不会出现。看到这个问题

QShortCut 是基于 QKeySequence 的,而 QKeySequence 不支持原生扫描码,所以在这个任务中不能使用 QShortCut。

于 2013-06-14T17:08:16.743 回答