首页 > 解决方案 > 程序延迟循环 - tkinter

问题描述

我正在尝试使用 Python 和 Tkinter 编写 clickbot。程序启动,显示一个窗口,您可以在其中输入显示坐标并提交数字。程序应该每 5 分钟点击一次这些坐标。

提交数字并单击正确的位置即可。但不是真的每5分钟循环一次。我没有更多的想法了。我知道,我可以使用time.sleep(),但是整个程序都休眠了。

import time
import tkinter as tk
import time
from pynput.mouse import Button, Controller

def getTextInput():
    global ValueX
    global ValueY
    resultX = e1.get()
    ValueX = resultX
    X = float(ValueX)
    resultY = e2.get()
    ValueY = resultY
    Y = float(ValueY)
    print('Eingabe X: ', X)
    print('Eingabe Y: ', Y)
    KlickMouse(X, Y)

def KlickMouse(X, Y):
    print('Old Mouse Pos:{0}'.format(mouse.position))
    mouse.position = (X, Y)
    time.sleep(0.2)
    # mouse.click(Button.left, 1)
    # time.sleep(0.2)
    # mouse.click(Button.left, 1)
    print('New Mouse Pos:{0}'.format(mouse.position))

mouse = Controller()
master = tk.Tk()
tk.Label(master, text="X-Koordinate").grid(row=0)
tk.Label(master, text="Y-Koordinate").grid(row=1)
tk.Button(master, text="Submit", command=getTextInput).grid(row=2)
tk.Button(master, text="Beenden", command=master.destroy).grid(row=3)
e1 = tk.Entry(master)
e2 = tk.Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
master.mainloop()

标签: pythontkinter

解决方案


您可以使用 Tkinter 的after方法来执行此操作。

def KlickMouse(X, Y):
    print('Old Mouse Pos:{0}'.format(mouse.position))
    mouse.position = (X, Y)
    print('New Mouse Pos:{0}'.format(mouse.position))
    master.after(5*60*1000, timedClick)

def timedClick():
    mouse.click(Button.left, 1)
    master.after(5*60*1000, timedClick)

现在坐标设置好后,程序等待 5 分钟(延迟以毫秒为单位,所以 5 分钟为5*60*1000)并运行timedClick。这会单击鼠标,然后再等待 5 分钟,然后再次调用自身。


推荐阅读