繁体   English   中英

pynput键盘侦听器在按下shift键时返回shift,但不会修改shift_pressed

[英]pynput Keyboard Listener returns shift when shift is pressed, but does not modify shift_pressed

我有一个简单的程序,可以使用pynput熟悉键盘监听器。 它做什么并不重要。 重要的是, shift_pressed属性似乎永远不会更改为True 我的程序当前如下所示:

from pynput.keyboard import Controller, Listener

boo = True
keyboard = Controller()

fib_lst = [0, 1]


def on_press(key):
    print(key)
    print(keyboard.shift_pressed)


Listener(on_press=on_press).start()

while boo:
    nxt = fib_lst[-1] + fib_lst[-2]
    input(nxt)
    fib_lst.append(nxt)

我正在尝试在on_press (或on_release )中执行以下操作:

def on_press(key):
    if key == Key.delete:
        if keyboard.shift_pressed:
            func1()

        else:
            func2()

按下shift键时,此代码应执行func1 ;否则应执行func2 但由于shift_pressed永远为假,因此它目前仅在执行func2 为了使shift_pressed正常工作,我可以做些什么?

编辑1:更清楚地指定所需的最终结果。

编辑2:将附加字符串更改为两个不同的函数,以增加清晰度。

编辑3:更改了最后一个问题的参数,以匹配最近的示例

我不确定百分百,但是当我使用Pynput时,我注意到我可以处理按键释放操作,而不是按键操作,因此您可以尝试以下操作:

from pynput import keyboard

def on_press(key):
    if key == keyboard.Key.shift: # handles if key press is shift
        print('foo', end='')

def on_release(key):
    if key == keyboard.Key.shift:
        print()
    elif key == keyboard.Key.delete:
        print('bar')
    elif key == keyboard.Key.esc:
        return False

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

get_current_key_input()

如果您需要任何其他帮助,请告诉我您的具体动机。

这是pynput 1.3.5文档中的错误。

各种修饰符状态属性( alt_pressedalt_gr_pressedctrl_pressedshift_pressed )仅反映Controller实例的状态; 它保持一个内部修饰符状态,该状态在按下各种键时会应用,例如,从支持该修饰符的脚本中输入大写字符。

此状态与当前操作系统状态是分开的,并且仅当您使用该特定控制器发送按键时才会更改。

没有通用的Pynput方法来检索当前的全局修饰符状态。

暂无
暂无

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

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