python-3.x - 如何循环直到使用pynput按下某个按钮?
问题描述
我当前的代码:
from pynput import keyboard
from pynput.keyboard import Key, Controller
import threading
import datetime, time
import os
import subprocess
keyboard = Controller()
def loading():
os.system("open /System/Applications/TextEdit.app")
time.sleep(1)
while running:
keyboard.press("a")
def on_press(key):
global running # inform function to assign (`=`) to external/global `running` instead of creating local `running`
if key == keyboard.Key.left:
running = True
# create thread with function `loading`
t = threading.Thread(target=loading)
# start thread
t.start()
if key == keyboard.Key.down:
# to stop loop in thread
running = False
if key == keyboard.Key.right:
# stop listener
return False
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
我试图循环键盘按下,但在按下右键或向下键时停止,但我收到“'Controller'对象没有属性'Listener'”的错误。当我不包含侦听器部分时,我的代码可以工作,所以我不确定如何将它们组合在一起以制作一个有凝聚力的程序。
解决方案
问题是你写了from pynput import keyboard
,然后keyboard = Controller()
,,所以同一个变量keyboard
然后引用你的 Controller 实例,而不是模块 pynput.keyboard (这实际上是其中的 Listener 类)
您可以为此使用不同的名称,同时实例化它,然后在其他任何地方使用它,例如在 loading() 内部,然后代码将起作用。
- 注意:使用没有延迟的循环
while True: keyboard.press('a')
是一个绝对 危险的想法——我的电脑完全挂起,没有响应,因为这样的陈述——并且不得不强制关闭它才能继续做任何事情。最好也包括一个time.sleep
那里。
推荐阅读
- mysql - MySQL 连接器:哪个更快...WHERE NOT EXISTS... 还是以前的选择?
- excel - VBA:通过 VBA 添加切片器会导致 VBA 项目在工作簿关闭后保持打开状态
- scikit-learn - 探索正则函数的排列重要性
- java - Exo player 2.8.2 总是以低带宽流开始
- python - 循环嵌套字典以创建新字典
- c# - C# Form app:使用HttpClient从磁盘上传xml文件,NodeJS服务器:正确接收xml文件
- c - 在 gcc 链接期间查看符号在哪里查找?
- python - python迭代函数绘制三角形
- python - 我编写了一个 python 代码来检查空值并且代码工作正常,但我需要简化代码
- python - python2中apply方法的python3替代方法是什么