import tkinter as tk
from tkinter import ttk, messagebox
import pyautogui
import threading
import time
import os

class AutoClicker:
    def __init__(self, root):
        self.root = root
        self.root.title("智能连点器")
        self.root.geometry("400x300")
        self.root.resizable(False, False)
        
        # 设置中文字体
        self.style = ttk.Style()
        self.style.configure("TLabel", font=("SimHei", 10))
        self.style.configure("TButton", font=("SimHei", 10))
        self.style.configure("TEntry", font=("SimHei", 10))
        
        # 连点参数
        self.click_count = tk.IntVar(value=10)
        self.interval = tk.DoubleVar(value=0.5)
        self.running = False
        self.paused = False
        self.current_clicks = 0
        
        # 创建界面
        self.create_widgets()
        
    def create_widgets(self):
        # 输入框架
        input_frame = ttk.Frame(self.root, padding="20")
        input_frame.pack(fill=tk.BOTH, expand=True)
        
        # 点击次数
        ttk.Label(input_frame, text="点击次数:").grid(row=0, column=0, sticky=tk.W, pady=5)
        ttk.Entry(input_frame, textvariable=self.click_count, width=10).grid(row=0, column=1, sticky=tk.W, pady=5)
        
        # 间隔时间(秒)
        ttk.Label(input_frame, text="间隔时间(秒):").grid(row=1, column=0, sticky=tk.W, pady=5)
        ttk.Entry(input_frame, textvariable=self.interval, width=10).grid(row=1, column=1, sticky=tk.W, pady=5)
        
        # 状态标签
        self.status_label = ttk.Label(input_frame, text="就绪,请设置参数并点击开始", foreground="blue")
        self.status_label.grid(row=2, column=0, columnspan=2, pady=10)
        
        # 按钮框架
        button_frame = ttk.Frame(self.root, padding="0 20")
        button_frame.pack(fill=tk.X)
        
        # 开始按钮
        self.start_btn = ttk.Button(button_frame, text="开始", command=self.start_clicking)
        self.start_btn.pack(side=tk.LEFT, padx=20, expand=True, fill=tk.X)
        
        # 暂停/继续按钮
        self.pause_btn = ttk.Button(button_frame, text="暂停", command=self.toggle_pause, state=tk.DISABLED)
        self.pause_btn.pack(side=tk.LEFT, padx=20, expand=True, fill=tk.X)
        
        # 停止按钮
        self.stop_btn = ttk.Button(button_frame, text="停止", command=self.stop_clicking, state=tk.DISABLED)
        self.stop_btn.pack(side=tk.LEFT, padx=20, expand=True, fill=tk.X)
        
        # 提示标签
        ttk.Label(self.root, text="提示: 开始后3秒自动开始点击鼠标当前位置", 
                 font=("SimHei", 9), foreground="gray").pack(side=tk.BOTTOM, pady=10)
    
    def start_clicking(self):
        # 验证输入
        try:
            count = self.click_count.get()
            interval = self.interval.get()
            
            if count <= 0 or interval <= 0:
                messagebox.showerror("输入错误", "请输入有效的次数和间隔时间(必须为正数)")
                return
        except:
            messagebox.showerror("输入错误", "请输入有效的数字")
            return
        
        # 更新状态和按钮
        self.running = True
        self.paused = False
        self.current_clicks = 0
        self.start_btn.config(state=tk.DISABLED)
        self.pause_btn.config(state=tk.NORMAL)
        self.stop_btn.config(state=tk.NORMAL)
        
        # 启动连点线程
        threading.Thread(target=self.clicker_thread, daemon=True).start()
    
    def clicker_thread(self):
        # 3秒倒计时
        for i in range(3, 0, -1):
            if not self.running:
                return
            self.status_label.config(text=f"即将开始,倒计时: {i}秒", foreground="orange")
            time.sleep(1)
        
        # 开始连点
        self.status_label.config(text=f"正在点击: 0/{self.click_count.get()}", foreground="green")
        
        while self.running and self.current_clicks < self.click_count.get():
            if not self.paused:
                # 点击当前鼠标位置
                pyautogui.click()
                self.current_clicks += 1
                self.status_label.config(text=f"正在点击: {self.current_clicks}/{self.click_count.get()}", foreground="green")
                
                # 等待间隔时间
                time.sleep(self.interval.get())
            else:
                # 如果暂停,短暂休眠以减少CPU占用
                time.sleep(0.1)
        
        # 完成或停止
        if self.current_clicks >= self.click_count.get():
            self.status_label.config(text="点击完成", foreground="purple")
        else:
            self.status_label.config(text="已停止", foreground="red")
        
        # 重置按钮状态
        self.running = False
        self.start_btn.config(state=tk.NORMAL)
        self.pause_btn.config(state=tk.DISABLED)
        self.stop_btn.config(state=tk.DISABLED)
    
    def toggle_pause(self):
        if self.paused:
            # 继续
            self.paused = False
            self.pause_btn.config(text="暂停")
            self.status_label.config(text=f"继续点击: {self.current_clicks}/{self.click_count.get()}", foreground="green")
        else:
            # 暂停
            self.paused = True
            self.pause_btn.config(text="继续")
            self.status_label.config(text=f"已暂停: {self.current_clicks}/{self.click_count.get()}", foreground="orange")
    
    def stop_clicking(self):
        self.running = False
        self.paused = False

if __name__ == "__main__":
    # 确保中文显示正常
    root = tk.Tk()
    app = AutoClicker(root)
    root.mainloop()

可以用来水完大学第一课


收录于知乎专栏「临时剪切板/垃圾箱/素材/有部分意义文本」· 查看知乎原文