我用Python编写了一个小程序,当我按下鼠标左键时,它执行“go”函数。不过,我的目的是在我持有LMB的情况下执行go。如果我释放LMB,它应该取消“开始”。最后,当取消或成功执行它应该准备好做同样的当我再次按下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()
您的问题是go()中的所有代码都是连续的。如果它是迭代的,您可以检查是否在该循环中触发事件或bool并中止go()。可以在SubscribeMouseLeftUp()上触发bool/事件。在您的情况下,这不能迭代地完成。在
您也许可以尝试在go()方法中添加触发器检查,虽然它不干净,但它可以完成任务,尽管它的效率非常低。在
第三,根据钩子和gui在线程中的工作方式,可以将go()卸载到线程中。在MouseDown上启动线程并在MouseUp上中止/杀死它。在
相关问题 更多 >
编程相关推荐