首页 > 解决方案 > 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()

难道我做错了什么?有没有办法解决这个问题?

标签: pythonpyautoguipynput

解决方案


对于将来遇到相同问题的任何人: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()

推荐阅读