pynput Keyboard Listener returns 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
。但它目前只做 func2
因为 shift_pressed
永远是假的。我可以做些什么来让 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_pressed
, alt_gr_pressed
, ctrl_pressed
and shift_pressed
) reflect only the state of the Controller
实例;它维护一个内部修改器状态,当按下各种键时应用该状态——例如,支持它的脚本中的大写字符。
此状态独立于当前操作系统状态,仅当您使用该特定控制器发送按键时才会更改。
没有通用的 pynput 方法来检索当前的全局修饰符状态。
我有一个简单的程序可以让我自己熟悉使用 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
。但它目前只做 func2
因为 shift_pressed
永远是假的。我可以做些什么来让 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_pressed
, alt_gr_pressed
, ctrl_pressed
and shift_pressed
) reflect only the state of the Controller
实例;它维护一个内部修改器状态,当按下各种键时应用该状态——例如,支持它的脚本中的大写字符。
此状态独立于当前操作系统状态,仅当您使用该特定控制器发送按键时才会更改。
没有通用的 pynput 方法来检索当前的全局修饰符状态。