我用Python写了一个小程序,当我按下鼠标左键时,它会执行函数"go“。然而,我的意图是只有在我持有LMB时才执行go。如果我释放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()发布于 2016-03-08 17:09:17
您的问题是go()中的所有代码都是连续的。如果它是迭代式,那么您可以检查在循环中触发的事件或bool,然后中止go()。bool/事件可以在SubscribeMouseLeftUp()上触发。在您的情况下,这不能迭代完成。
你也许可以尝试在go()方法中添加一个触发器的检查,虽然它不干净,但它可以完成这项工作,尽管它的效率非常低。
第三,根据钩子和gui在线程中的工作方式,您可以将go()卸载到线程。在MouseDown上踢开该线程,然后在MouseUp上中止/终止它。
https://stackoverflow.com/questions/35862697
复制相似问题