我在Python中编写了一个小程序,它执行函数" go"当我按下鼠标左键。然而,我的意图是只在我持有LMB时执行。如果我发布LMB,它应该取消" go"。最后当取消或成功执行时,我应该准备好在我再次按下LMB时也这样做。
以下是代码:
import pyHook
import pythoncom
import pyautogui
from time import sleep
pyautogui.size()
width, height = pyautogui.size()
def go(event):
sleep(0.099)
pyautogui.moveRel(4, 19, duration=0.099)
pyautogui.moveRel(-4, 7, duration=0.099)
pyautogui.moveRel(-3, 29, duration=0.099)
pyautogui.moveRel(-1, 31, duration=0.099)
pyautogui.moveRel(13, 31, duration=0.099)
pyautogui.moveRel(8, 28, duration=0.099)
pyautogui.moveRel(13, 21, duration=0.099)
pyautogui.moveRel(-17, 12, duration=0.099)
pyautogui.moveRel(-42, -3, duration=0.099)
pyautogui.moveRel(-21, 2, duration=0.099)
pyautogui.moveRel(-15, 7, duration=0.099)
pyautogui.moveRel(12, 11, duration=0.099)
pyautogui.moveRel(-26, -8, duration=0.099)
pyautogui.moveRel(-3, 4, duration=0.099)
pyautogui.moveRel(40, 1, duration=0.099)
pyautogui.moveRel(19, 7, duration=0.099)
pyautogui.moveRel(14, 10, duration=0.099)
pyautogui.moveRel(27, 0, duration=0.099)
pyautogui.moveRel(33, -10, duration=0.099)
pyautogui.moveRel(-21, -2, duration=0.099)
pyautogui.moveRel(7, 3, duration=0.099)
pyautogui.moveRel(-7, 9, duration=0.099)
pyautogui.moveRel(-8, 4, duration=0.099)
pyautogui.moveRel(19, -3, duration=0.099)
pyautogui.moveRel(5, 6, duration=0.099)
pyautogui.moveRel(-20, -1, duration=0.099)
pyautogui.moveRel(-33, -4, duration=0.099)
pyautogui.moveRel(-45, -21, duration=0.099)
pyautogui.moveRel(-14, 1, duration=0.099)
return True
hm = pyHook.HookManager()
hm.SubscribeMouseLeftDown(go)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
答案 0 :(得分:0)
您的问题是go()中的所有代码都是顺序的。如果它是迭代的,你可以检查一个事件或bool在该循环中被触发并中止go()。可以在SubscribeMouseLeftUp()上触发bool / event。在您的情况下,这不能以迭代方式完成。
你或许可以尝试在你的go()方法中检查触发器是不是很干净,但它可以完成这项工作,无论是效率非常低。
第三,根据hooks和gui在线程中的工作方式,你可以将go()卸载到一个线程中。在MouseDown上关闭该线程并在MouseUp上中止/终止它。