window= Tk()
window.geometry("600x400")
window.title("autoclicker")
onoff = StringVar()
onoff.set("the autoclicker is off")
onoroff= Label(window, textvariable=onoff, font=("arial", 10))
onoroff.pack()
inf=1
y=input("how many secconds? : ")
y=float(y)
print("press x to start and p to stop")
while inf==1:
keyboard.wait("x")
onoff.set("the autoclicker is on")
print("autoclicker started")
while not keyboard.is_pressed("p"):
click()
time.sleep(y)
print("autoclicker stopped")
onoff.set("the autoclicker is off")
window.mainloop()
我用谷歌搜索了一下,没有找到任何结果 我是Python新手,我试图制作一个自动点击器程序,在GUI中它会显示自动点击器是否启动(我昨天开始)
理想情况下,
tkinter
程序不应有while
循环或其他阻塞调用(您有:keyboard.wait("x")
),因为这些会使图形用户界面无响应。
下面的代码使用
window.mainloop()
来允许 tkinter
自己管理所有事件。例如,这意味着关闭主窗口会退出程序,从而清理其他所有内容。
我使用的机制是
.after()
方法,它允许 tkinter
将来执行任意功能,同时保持响应能力。
import tkinter as tk
import keyboard
from pyautogui import click
import time
state = 1
def clicker(window, y_ms):
if state == 2:
click()
window.after(y_ms, lambda: clicker(window, y_ms))
def states(window, onoff, y_ms):
global state
if state == 1:
if keyboard.is_pressed('x'):
onoff.set("the autoclicker is on")
state = 2
window.after(y_ms, lambda: clicker(window, y_ms))
elif state == 2:
if keyboard.is_pressed('p'):
onoff.set("the autoclicker is off")
state = 1
window.after(10, lambda: states(window, onoff, y_ms))
def main():
y_ms = int(float(input("how many seconds? ")) * 1000)
print("press x to start and p to stop")
window = tk.Tk()
window.geometry("600x400")
window.title("autoclicker")
onoff = tk.StringVar()
onoff.set("the autoclicker is off")
onoroff = tk.Label(window, textvariable=onoff, font=("arial", 10))
onoroff.pack()
window.after(10, lambda: states(window, onoff, y_ms))
window.mainloop()
if __name__ == '__main__':
main()
print('Done')