仅运行尚未运行的函数

2024-10-01 07:40:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在自动点击器上,当鼠标点击一次(使用“鼠标”模块)时,再按5次。但是,我还需要确保只有用户完成的点击才能激活它。目前(因为我不需要像以前那样不可阻挡的鼠标),它只打印“点击”。这就是我目前所拥有的

jack = 0
import keyboard
import mouse
import sys
from time import sleep
def spamClick(f, jeff):
    if jeff <= 0:
        jeff = jeff+1
        for i in range(f):
            #mouse.click()
            print ("Clicking")
            sleep(0.1)
        jeff = 0
mouse.on_click(spamClick, args=(5, jack))
#keyboard.add_hotkey('ctrl+g', spamClick)
keyboard.add_hotkey('ctrl+#', mouse.unhook_all)
keyboard.add_hotkey('ctrl+#', sys.exit)

先谢谢你


Tags: 模块importaddsyssleep鼠标clickctrl
1条回答
网友
1楼 · 发布于 2024-10-01 07:40:28

一个简单的解决方法是有一个顶级变量跟踪状态。 问题是,您有一个函数,它执行一个再次启动的操作

它的功能与

def examplecode():
    print("Do stuff")
    examplecode()

这与无限循环相同,在您的情况下甚至更糟,因为您每次调用函数多次(每个操作5次)

因此,您可以选择以下方法来防止这种情况:

  • 有两种不同的点击方式,一种触发“onclick”事件,另一种不触发
  • 使用帮助函数跟踪程序的“状态”。不要在onclick事件中调用“spamClick()”,而是将以下内容添加到程序中:

当您希望它接受单击时为True的顶级变量:isUser=True

您调用的函数,而不是“spamclick”,它检查全局变量的状态,然后才触发代码:

def examplefunc(num,var):
    if isUser:
        isUser=False
        spamClick(num,var)
        isUser=True

我仍然不明白你的程序是如何“无休止地点击”而不是因为达到最大递归深度而崩溃的,但这应该是可行的(虽然非常有黑客味)

编辑:你应该使用更好的变量命名,而不是“jeff”,如果你不这样做,你的生活会变得更糟。例如,“isUser”表示它是一个布尔值(因为“iswhere”表示它将一个状态保持为布尔值),并表示输入是否由用户进行。或者,您可以使用isFunctionRunning=False来说明函数是否打开。当然,在我的例子中,你必须切换所有正确和错误的赋值,以使其仍然有意义

相关问题 更多 >