繁体   English   中英

pynput 代码没有给我一个简单的字符串作为键

[英]pynput code doesn't give me a simple string as a key

我有这个简单的pynput代码:

import pynput
from pynput.keyboard import Key, Listener

keys = []

def on_press(key):
    keys.append(key)
    write_file(keys)


def write_file(keys):

    allowed = ['7','9','1','3','4','5','6','q','w','e','z']
    with open('log.txt', 'w') as f:
        for key in keys:
            if key in allowed:
                # removing ''
                k = str(key).replace("'", "")
                f.write(k)

                f.write(',')

def on_release(key):

    print('{0} released'.format(key))
    if key == Key.esc:
        # Stop listener
        return False


with Listener(on_press = on_press,
        on_release = on_release) as listener:

    listener.join()

当我运行它并在我的键盘上输入 7 时,我希望它会将 7 写入 log.txt,因为它在允许的列表中。 但事实并非如此。 我使用 import pdb 和 pdb.set_trace() 跟踪它,当我手动输入时

'7' in allowed

我得到一个真实的

但是当我使用

key in allowed

即使键是“7”,我也会得到一个 False。 我怀疑它与类型有关,因为当我使用

type(key)

我明白了

<class 'pynput.keyboard._xorg.KeyCode'>

所以我想我必须让 key 成为一个正常而无聊的字符串。

str(key)

仍然不会说它在允许列表中。

我尝试查看有关 KeyCode 的 pynput 文档,但我认为这对我没有帮助。 也许其他人知道如何使这项工作?

你必须比较

key.char == '7' 

但是当key没有.char时会出错 - 即CtrlAltShift等甚至Space - 所以比较安全

key == KeyCode.from_char('7')

from pynput.keyboard import Listener, Key, KeyCode


def on_press(key):
    try:
        print('from_char:', key == KeyCode.from_char('7'))
        print('key.char :', key.char == '7')
    except Exception as ex:
        print('Error:', ex)


def on_release(key):

    #print('{0} released'.format(key))
    if key == Key.esc:
        # Stop listener
        return False


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

编辑:

from pynput.keyboard import Listener, Key, KeyCode


#allowed = [KeyCode.from_char('7'), KeyCode.from_char('9')]
#allowed = [KeyCode.from_char(char) for char in ['7','9','1','3','4','5','6','q','w','e','z']]
allowed = [KeyCode.from_char(char) for char in '7913456qwez']
    
def on_press(key):
    try:
        print('allowed:', key in allowed)
    except Exception as ex:
        print('Error:', ex)


def on_release(key):

    #print('{0} released'.format(key))
    if key == Key.esc:
        # Stop listener
        return False


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM