Python 检查键盘输入是否不工作。请帮忙

Python 检查键盘输入是否不工作。请帮忙,python,keyboard,Python,Keyboard,我正在尝试此处提供并接受的代码: 但我得到了这个错误。你知道为什么吗?我是新来的,所以如果我在这个问题上违反了一些规则,那么请让我知道,但如果可能的话,请先提出一些解决问题的方法 import keyboard import time listedSongs = [] currentSong = "idk" exit = False # make a loop control variable def alt_k(): i = 1 paused = Fa

我正在尝试此处提供并接受的代码: 但我得到了这个错误。你知道为什么吗?我是新来的,所以如果我在这个问题上违反了一些规则,那么请让我知道,但如果可能的话,请先提出一些解决问题的方法

import keyboard
import time

listedSongs = []
currentSong = "idk"
exit = False  # make a loop control variable

def alt_k():
    i = 1
    paused = False

def alt_q(): 
    global exit
    exit = True

def alt_s():
    if currentSong not in listedSongs:
        listedSongs.append(currentSong)
        print(listedSongs)

# assign hooks to the keyboard
keyboard.on_press_key("alt+k", alt_k)  # on press alt+k, execute alt_k()
keyboard.on_press_key("alt+q", alt_q)
keyboard.on_press_key("alt+s", alt_s)

# main loop
while not exit:
    keyboard.wait()  # "block" for input (essentially, do nothing until a key is pressed and yield CPU resources to anything else that wants them)
我得到的错误是:

Traceback (most recent call last):
  File "D:\AJ\Coding\test.py", line 26, in <module>
    keyboard.on_press_key("alt+k", alt_k)  # on press alt+k, execute alt_k()
  File "C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site-packages\keyboard\__init__.py", line 510, in on_press_key
    return hook_key(key, lambda e: e.event_type == KEY_UP or callback(e), suppress=suppress)
  File "C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site-packages\keyboard\__init__.py", line 493, in hook_key
    scan_codes = key_to_scan_codes(key)
  File "C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site-packages\keyboard\__init__.py", line 324, in key_to_scan_codes
    raise ValueError('Key {} is not mapped to any known key.'.format(repr(key)), e)
ValueError: ("Key 'alt+k' is not mapped to any known key.", ValueError("Key name 'alt+k' is not mapped to any known key."))
回溯(最近一次呼叫最后一次):
文件“D:\AJ\Coding\test.py”,第26行,在
键盘。按下键(“alt+k”,alt\k)#按下alt+k,执行alt\k()
文件“C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site packages\keyboard\\uuuuuuu init\uuuuuuu.py”,第510行,在on_按下_键
返回hook_key(key,lambda e:e.event_type==key_UP或callback(e),suppress=suppress)
文件“C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site packages\keyboard\\uuuuuuu init\uuuuuuu.py”,第493行,在hook\u键中
扫描代码=按键至按键扫描代码(按键)
文件“C:\Users\AJ\AppData\Local\Programs\Python\Python39\lib\site packages\keyboard\\uuuuuuuu init\uuuuuuuuu.py”,第324行,在键到键扫描代码中
raise VALUERROR('项{}未映射到任何已知项。'.format(repr(Key)),e)
ValueError:(“键'alt+k'未映射到任何已知键。”,ValueError(“键名'alt+k'未映射到任何已知键。”)

似乎
按一下键()
只能用单键,如
q
,但不能用组合键
alt+q
。或者可能这只是某些系统的问题。至少它在我的Linux上不起作用

或者他们可能会更改模块中的代码。答案是2岁


您可以使用
add_hotkey()
而不需要
wait()

参见文档中的示例:


最后,您可以使用
hotkye=read_热键(…)
if/else
来执行正确的功能

我不确定,但有时它对我也适用于
hotkey=keyboard.wait(suppress=False)
,但有时它不起作用

while not exit:
    hotkey = keyboard.read_hotkey(suppress=False)
    #hotkey = keyboard.wait(suppress=False)

    print('hotkey:', hotkey)

    if hotkey == 'alt+k':
        alt_k()
    elif hotkey == 'alt+q':
        alt_q()

这就是我解决问题的方法

我放弃了键盘模块,因为它没有按我希望的方式工作,然后我使用了。代码基本相同,但现在所有东西都单击到位


希望这对将来的人有所帮助。

我们需要完整的回溯来诊断错误。最明显的是,您分配给全局变量时没有在函数中声明它们(即,
alt_q
函数需要在顶部写一行,上面写着
global exit
)。a始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,也不是指向外部门户的链接)放在问题中(不是注释)。还有其他有用的信息。@b如果我已经按照您的建议更新了我得到的错误,并且还更新了alt_q函数中的“全局退出”,那么我仍然会得到相同的错误。还有什么建议吗?@furas谢谢你指导我。我已经照你说的做了。谢谢你详细的回答,但我有一个大问题。我正在尝试创建一个脚本,其中我正在使用热键“windows+L”(顺便说一句,我知道它是用来锁定窗口的),我正在尝试在脚本中添加一个函数,以便在按下“windows+L”时关闭显示。您提供的代码成功地实现了这一点,但只实现了一次。一旦按下上述热键,脚本将挂起,并且在正常工作之前没有其他热键工作。它快把我逼疯了。你知道为什么会这样吗?我必须在脚本挂起后使用“Ctrl+C”关闭脚本以退出脚本。新信息刚刚曝光。windows键与脚本挂起无关。一旦你锁上窗户,你所有的热键都会停止工作,这就错过了为方便起见热键的全部要点。所以,你可以设置所有的热键,一旦你锁定你的系统,一切似乎都失去了。不知道如何让它工作。。。如果您有任何帮助,我们将不胜感激。您在锁定或解锁时是否遇到问题?当窗口被锁定时,是否要使用热键?但出于安全原因,锁必须阻止对计算机的访问——有人可能仍会访问您的数据。最终,您可以使用check而不是Python,也许在系统锁定时它可以工作。我不使用Windows,因此无法测试它。不,我不想在电脑锁定时使用它。(很抱歉,如果您在我的评论后得出了这样的结论。简单来说,您上面编写的代码非常有效,所有按键都会被检测到,但一旦您锁定并解锁windows帐户,就不会检测到按键(我锁定我的帐户时,您的脚本正在运行)。我发布了一个关于这个问题的问题,如果你想看一看,那么这里是该问题的链接,在那里解释得更好(希望如此。)。这里是该问题的链接。我不使用WIndows,所以我无能为力。使用其他工具的唯一想法-可能会更好。它是专门为WIndows创建的。或者你可以尝试其他模块
while not exit:
    hotkey = keyboard.read_hotkey(suppress=False)
    #hotkey = keyboard.wait(suppress=False)

    print('hotkey:', hotkey)

    if hotkey == 'alt+k':
        alt_k()
    elif hotkey == 'alt+q':
        alt_q()