我正在编写一个脚本,它截取屏幕截图并解码图像名称中的特定按键,如下所示。我的问题是,当我按下键盘左箭头时,数字 4 也被按下了。我在谷歌或键盘库的文档中找不到任何东西。我正在使用 Windows 和 Python 3.6.5
(75,)
left arrow pressed
(5, 75)
4 pressed
向下箭头也会发生同样的事情,但数字 3 会发生。
(80,)
down arrow pressed
(3, 80)
2 pressed
代码:
from PIL import ImageGrab
import keyboard # using module keyboard
import time
keys = [
"down arrow",
"up arrow",
"left arrow",
"right arrow",
"w",
"s",
"a",
"d",
"1",
"2",
"3",
"4",
"q",
“e”,“f”]
if __name__ == "__main__":
while True:
code = []
try:
for key in keys:
if keyboard.is_pressed(key):
print(keyboard.key_to_scan_codes(key))
print(f"{key} pressed")
code.append(1)
else:
code.append(0)
if keyboard.is_pressed('esc'):
print(key + " pressed")
break
c = "".join(map(str, code))
snapshot = ImageGrab.grab()
save_path = str(int(time.time()*1000)) + "-" + c + ".jpg"
snapshot.save("tmp\\" + save_path)
except:
break
原文由 Kev 发布,翻译遵循 CC BY-SA 4.0 许可协议
keyboard
模块有针对此类实例的简单解决方案,它们使用event-triggered
激活而不是polling
就像您在尝试中使用的那样。示例代码:
替换下面的代码并根据您的需要进行更改。
另一种更动态的方法如下:
我注意到的另一个问题是您使用的是
"left arrow"
但实际上它被识别为"left"
(至少在我的系统上,它可能与您的不同,但我假设您希望它在所有系统上工作,所以使用"left"
会更安全)您可以使用的最后一种方法是非常静态类型的,没有动态功能,但可以在
"4+left"
或"left+4"
的情况下使用你看起来足够聪明,可以从那里找出其余的。