无论键盘布局如何,都可获取键码

时间:2013-11-15 18:17:40

标签: javascript qt qtwebkit

我有一个程序,无论用户使用什么键盘语言设置,我都需要在按下的键的javascript中获取键码。

这是我的代码:

JS:

window.addEventListener('keydown', function(e) {
    console.log(e.keyCode);
    // it works fine in all browsers, but in qwebview keycode == 0 in russian layout
});

的Python:

class View(QWebView):

    def __init__(self, parent=None):
        super(QWebView, self).__init__(parent)

    def keyPressEvent(self, e):
        print e.key() # same as in JS
        print e.nativeScanCode() # ??
        # QWebView.keyPressEvent(self, e)

2 个答案:

答案 0 :(得分:1)

使用e.code属性而不是e.keyCode。例如,在美式或法文键盘上按第一个字母键(在法语中为A)将为您提供KeyQ

请注意,它在Edge上不起作用。截至2019年4月在版本18上进行了测试。

使用此网站进行测试:http://keycode.info

答案 1 :(得分:0)

e.whiche.keyCode均已弃用,因此应改用e.keye.code

  • e.key

    KeyboardEvent界面的key只读属性返回用户按下的键的值,同时还要考虑修饰键的状态,例如 Shift 作为键盘的语言环境和布局。其值确定如下:

  • e.code

    KeyboardEvent.code属性表示键盘上的物理键(与按下键时生成的字符相反)。换句话说,此属性返回的值不会因键盘布局或修改键的状态而改变。

Support for e.key is slightly better in older browsers,因此此版本可在Edge和IE的某些旧版本上使用。请记住,其中一些旧的浏览器使用了非标准代码,例如,左通常是'LeftArrow',右通常是'RightArrow',但是在IE中,它只是'Left'和{{ 1}}。

此外,如果需要检查KeyboardEvent的属性值,例如'Right'e.keye.codee.which,则可以使用https://keyjs.dev。我将很快添加有关此类跨浏览器不兼容性的信息!

Key.js \ JavaScript KeyboardEvent's key codes & key identifiers

免责声明:我是作者。