【问题标题】:Python pynput not 'understanding' greek charactersPython pynput 不能“理解”希腊字符
【发布时间】:2021-04-13 22:37:14
【问题描述】:

早上好, 我正在使用 Python 的 3.8 pynput(在 Windows 10 中)来获取每次输入的字符(在系统级别),然后是该字符的 unicode。

from pynput import keyboard


def on_press(key):
    if key == keyboard.Key.esc: #if button escape is pressed close the program
        listener.stop()
    else: #if button escape is not pressed get the unicode code of the button-char pressed
        unicode_code = ord(getattr(key, 'char', '0'))
        print("The unicode is ",unicode_code)
        print("The char entered is",chr(unicode_code))


controller = keyboard.Controller()
# Collect events until released
with keyboard.Listener(on_press=on_press) as listener:
    listener.join()

我面临的问题是,当我将键盘更改为希腊语(使用 shift+alt)时,它会保留英语的 unicode,而不是希腊语的 unicode。 您可以查看随附的屏幕截图以更好地理解。

如何解决这个问题?

【问题讨论】:

    标签: python python-3.x keyboard pynput


    【解决方案1】:

    不,您没有收到英文 unicode 代码。您将获得键盘返回的代码的 unicode 表示。无论选择哪种语言,它们都是相同的,因为键盘层旨在始终为相同的键返回相同的代码(通过它们的位置和/或在 querty/quertz 或其他 HID 兼容键盘上的含义),如果可能的话。您在代码中所做的实际上是恢复 pynput 完成的过程,该过程使用 char()/unichar() 函数转换键盘代码。想一想:是否有希腊语表示例如? F11 键?

    我不记得 pynput 是否支持更高级别的输入,尽管我认为确实如此。并且应该可以直接得到你想要的 您要做的就是找到另一个包含发送到输入字段的字符的属性(如果有,我不是 pynput 专家),或者检查当前的键盘语言并适当地映射返回的代码。您还可以尝试使用 codecs 模块来玩代码页。最坏的情况包括直接从 GUI 的输入字段中获取字符。但这将是非常不雅的,蛮力的,而且如果不是绝对必要的话,根本不应该这样做。还有其他方法可以从操作系统获取输入 - 例如使用内置库通过 ctypes、wintypes、Mac 上的 Cocoa/Carbon 或 Linux 上的 GTK 直接链接到其事件输入系统或内核。

    【讨论】:

      【解决方案2】:

      尝试使用 pynput 1.1.7 版,它可以在那里工作。它在 1.4 之后就坏了,在这两者之间它可以工作,但是在程序运行时使用 windows 快捷方式更改布局,70% 的时间都不能正常工作,这意味着 Windows 只是不会改变语言。或者,您可以通过尝试this 解决方案在较新的版本中解决它,如果您不关心性能,它会实时转换字符。我已经打开了一个问题,以便在 repo 的 github 中修复它。

      【讨论】:

        猜你喜欢
        • 2016-04-02
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多