使用键盘模块时检测按键释放

aoa*_*eai 2 python keyboard pynput

警告:我的英语很糟糕,而且我对 python 还很陌生
,所以我正在制作一个需要特定按键(例如空格键)来继续循环的程序,例如:

for i in *some sort of list*: 
    print(something)
    *waits for a key*
Run Code Online (Sandbox Code Playgroud)

我的最后一行的方法是键盘模块(不是来自 pynput),它具有函数is_pressed. 当我按下一个键时,我得到了输出:

*something*
*something*
*something*
*repeats for several times*
Run Code Online (Sandbox Code Playgroud)

我知道该函数检测按键而不是按下并释放,因此一旦我释放它,此输出就会停止。但这不是我的程序的工作原理。每次我释放该键时它都应该响应。不幸的是,我找不到调用的函数is_released或其他东西,并且模块pynput无法获取我按下的键Listener。至少我不能。

另外,有没有办法在计算机上同时拥有keyboard和导入?pynput我的 VS Code 会忽略安装keyboard时间。pynput

编辑:这是我的问题解决方案,但它非常愚蠢:

while True:
    if keyboard.is_pressed('space'):
        while True:
            if not keyboard.is_pressed('space'):
                break
        break
Run Code Online (Sandbox Code Playgroud)

有没有一个函数可以做同样的事情?

Ser*_*edd 5

由于它仅检测按键,因此请使用标志。我认为这样的事情可以做到这一点: 1. 创建一个 bool 变量来检测单个按键按下 2. 如果按键被按下,则 bool 将设置为 true 3. 如果 bool 为 true 而不是 key.is_pressed:做你的事情4.运行后将bool设置为false

例如,在代码中,将是这样的:

keypress = False
key = 'space'
while True:
    if keypress and not keyboard.is_pressed(key):
        '''DO YOUR THING'''
        #beak out of while loop?
        keypress = False
        break
    elif keyboard.is_pressed(key) and not keypress:
        keypress = True
Run Code Online (Sandbox Code Playgroud)

不知道你是否会这样做,但我想你可以从中明白我的意思。祝你好运!