【问题标题】:type(list[0]) returns pynput.keyboard._win32.KeyCodetype(list[0]) 返回 pynput.keyboard._win32.KeyCode
【发布时间】:2019-02-13 22:45:35
【问题描述】:

我的问题是pynput 如何返回数据(我希望你会这么说?)。

所以我想要做的是让听者记录键盘输入,然后使用添加到列表中的字母在 word 中创建一个字符串。虽然,看起来这些字母不是字符串。相反,他们以 pynput.keyboard._win32.KeyCode

的形式返回

有没有办法将其转换为 python 可读的字符串或其他东西?
比如:我输入了f, t, w

print(type(list[0]), word)
return 'f', ftw

目前的结果是

f[] pressed
t['f'] pressed
w['f', 't'] pressed
 ['f', 't', 'w'] pressed
['f', 't', 'w'] <class 'pynput.keyboard._win32.KeyCode'> # then basically nothing for word  
[] pressed

from pynput import keyboard


list = []
word = ''.join(list)


def press(key): 
    print(list, 'pressed') 
    if key is not keyboard.Key.space:
        list.append(key)
    elif keyboard.Key.space is key:
        pass
    elif keyboard.Key.enter is key:
        pass


def release(key):
    if key == keyboard.Key.space:
        print(type(list[0]), word)
        if word in hkey:
            func()
        list.clear()

with keyboard.Listener(on_press=press, on_release=release) as listener:
    listener.join()

【问题讨论】:

    标签: python listener event-listener pynput


    【解决方案1】:

    您可以使用pynput.keyboard._win32.KeyCodechar 属性从按下的键中提取字符。换句话说,在您的press 函数中,您会将key.char 附加到列表中。另外,我会避免使用list 作为变量名。

    def press(key):
        print(_list, 'pressed')
        if key is not keyboard.Key.space:
            _list.append(key.char)         # <-- Note: key.char
        elif keyboard.Key.space is key:
            pass
    elif keyboard.Key.enter is key:
        pass
    

    【讨论】:

    • 哦。这行得通。太感谢了。我已经尝试了很多解决方法。像 str()、chr() 和其他看起来很复杂的东西。希望我能以某种方式适当地感谢你。
    • 在你的辩护中,文档似乎没有提到这个属性。我在其中一个示例的代码中找到了它。很高兴为您提供帮助!
    • 谢谢你,这真的很有帮助。有没有办法对非字母数字键(例如“:”)执行此操作?
    • @skrhee 应该已经适用于 ':' 或任何其他非字母数字键,它应该适用于任何字符。
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2022-01-14
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多