Что делать, если не работает автокликер на Python

У меня почему-то не запускается автокликер

from tkinter import *
from tkinter import ttk
import time
import mouse
import keyboard

interval = 0

def cpsGet():
    global interval
    cpsStr = cpsInput.get()
    cpsFloat = float(cpsStr)
    interval = 1 / cpsFloat
    print(interval)

def intervalGet():
    global interval
    intervalStr = intervalInput.get()
    interval = float(intervalStr)
    print(interval)

def change():
    global work
    work = not work
    print(work)

work = False
keyboard.add_hotkey('ё', change)

while work:
    mouse.click(button='left')
    time.sleep(interval)

window = Tk()
window.title("AutoClicker")
window.geometry("250x200")

cpsText = Label(text="Установить клики в секунду:")
cpsText.pack(anchor=W)

cpsInput = Entry()
cpsInput.pack(anchor=W)

cpsSetBtn = Button(text="Установить", command=cpsGet)
cpsSetBtn.pack(anchor=W)

cpsText = Label(text="")
cpsText.pack(anchor=W)

intervalText = Label(text="Установить интервал:")
intervalText.pack(anchor=W)

intervalInput = Entry()
intervalInput.pack(anchor=W)

intervalSetBtn = Button(text="Установить", command=intervalGet)
intervalSetBtn.pack(anchor=W)

startEndBtn = Button(text="Запуск/Выключение", command=change)
startEndBtn.pack(anchor=W)
        
window.mainloop()

Вот код, сам не могу найти ошибку, сам Python ошибок не выдаёт, значения переменных задаются, просто не активируется фрагмент кода с автокликом


Ответы (1 шт):

Автор решения: Amgarak

Посмотрите в сторону метода after или библиотеке threading - ПРИМЕР

Небольшой пример для вас:

import tkinter as tk
import mouse
import keyboard

class AutoClicker(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("AutoClicker")
        self.geometry("300x150")

        # Значения по умолчанию
        self.default_interval = "1.0"  
        self.interval = 1.0  # 1 клик в 1 секунду
        self.is_running = False

        self.create_widgets()
        
        keyboard.add_hotkey('F1', self.toggle_clicker)

    def create_widgets(self):

        self.interval_var = tk.StringVar(value=self.default_interval)

        tk.Label(self, text="Интервал в секундах:").pack(anchor=tk.W, pady=5)
        self.interval_input = tk.Entry(self, textvariable=self.interval_var)
        self.interval_input.pack(anchor=tk.W, padx=10)

        tk.Button(self, text="Установить интервал", command=self.set_interval).pack(anchor=tk.W, padx=10, pady=5)

        self.toggle_button = tk.Button(self, text="Запуск/Остановка", command=self.toggle_clicker)
        self.toggle_button.pack(anchor=tk.W, padx=10, pady=10)

    def set_interval(self):
        try:
            self.interval = float(self.interval_var.get())
            print(f"Интервал установлен: {self.interval:.4f} сек")
        except ValueError:
            print("Некорректное значение интервала. Сброс на значение по умолчанию.")
            self.interval_var.set(self.default_interval)  
            self.interval = float(self.default_interval)

    def toggle_clicker(self):
        self.is_running = not self.is_running
        if self.is_running:
            self.start_clicking()
            print("Автокликер запущен")
        else:
            print("Автокликер остановлен")

        # Блокировка кнопки на 1 секунду. Избовляет от самонажатия.
        self.toggle_button.config(state=tk.DISABLED)
        self.after(1000, self.enable_toggle_button)

    def enable_toggle_button(self):
        self.toggle_button.config(state=tk.NORMAL)

    def start_clicking(self):
        if self.is_running:
            mouse.click(button='left')
            self.after(int(self.interval * 1000), self.start_clicking) 

if __name__ == "__main__":
    root = AutoClicker()
    root.mainloop()
→ Ссылка