python - pynput 按键积压
问题描述
(注意:编程初学者和堆栈溢出初学者,如果我做错了什么,请见谅)
我正在尝试编写一个python(python 3.7.3,如果有用的话)程序,当按住反斜杠(“\”)键时,它会向左键单击垃圾邮件(用于在线游戏。我将绑定鼠标按钮到“\”,这样就不必检测鼠标左键并遇到程序检测鼠标点击的问题)。我的代码目前可以工作,但是当“\”被释放时,根据它的持有时间,停止点击需要几秒钟。
这是我的代码:
from pynput.keyboard import Key, Listener
import pyautogui
def key_down(key):
if str(key) == "'\\\\'":
pyautogui.click()
def key_up(key):
if str(key) == "'\\\\'":
print('key has been lifted')
with Listener(on_press=key_down,on_release=key_up) as l:
l.join()
难道我做错了什么?有没有办法解决这个问题?
解决方案
对于将来遇到相同问题的任何人:idk 如何解决积压的原始问题,但通过线程解决了它。这是我现在的代码:
注意:“'\\\\'”是检查是否按下了反斜杠键,但是pynput模块将其存储为“'\\'”,因此由于反斜杠是转义字符,因此您需要键入它"'\\\\'" 让它实际上是 "'\\'"
from pynput.keyboard import Key, Listener
import pyautogui
from threading import Thread
shouldClick = False
def click():
while True:
while shouldClick:
pyautogui.click()
def key_down(key):
global shouldClick
if str(key) == "'\\\\'":
shouldClick = True
def key_up(key):
global shouldClick
if str(key) == "'\\\\'":
shouldClick = False
print('key has been lifted')
def listen():
with Listener(on_press=key_down,on_release=key_up) as l:
l.join()
listenThread = Thread(target=listen)
clickThread = Thread(target=click)
listenThread.start()
clickThread.start()
可选地,如果您想将点击的限制推到极致,您可以添加以下代码:
thrCount = 40
print(thrCount, 'threads')
for _ in range(thrCount):
clickThreadList.append(Thread(target=click))
for thr in clickThreadList:
thr.start()
推荐阅读
- maven - 覆盖 Apache Maven 依赖插件的设置
- java - 使用给定的 JUNIT 测试在数组中找到最接近平均值的值
- timer - 在触发回调nodemcu之前删除计时器警报
- php - 让我们在 LEMP Ubuntu 16.04 上使用 Nginx 加密 Laravel 应用程序
- java - Java Futures 在使用 Mockito 时返回 null
- c++ - 模板模板参数中模板参数数量不匹配
- python - Zeppelin & spark.ipyspark & folium
- python - 按下按钮时退出while循环
- python - Tkinter 窗口未从线程打开,使用来自套接字连接的数据
- javascript - react-input-range 不会在 react-leaflet Map 中触发事件(onChange,onClick)