简易连点器 —— 用 Python 打造属于你的自动点击工具

发布日期:2025-05-13
标签:Python 自动化工具 GUI
分类:编程工具

点击下载 EXE 工具


你是否曾因重复点击游戏按钮或频繁操作办公软件而疲惫不堪?今天带来一个实用的小工具 —— Python 简易连点器,它能够根据你的设置自动点击鼠标,彻底解放你的双手。

这个小工具拥有简洁直观的图形界面,无需编程基础也能轻松使用。无论是游戏挂机、软件测试,还是网页自动刷新,都能派上用场。


🛠 工具功能概览

  • ✅ 支持左键/右键点击
  • ✅ 自定义点击间隔(单位:秒)
  • ✅ 可设置启动与停止热键(默认:F6 启动,F8 停止)
  • ✅ 支持后台运行,不打断你正常使用电脑
  • ✅ 可打包为 EXE,双击即可运行,无需 Python 环境

💻 图形界面展示

启动工具后,你将看到一个简单直观的窗口界面,主要包括以下几个部分:

  1. 点击间隔:设置每次点击之间的延迟,单位为秒。比如 0.1 表示每秒点击约 10 次。
  2. 鼠标按钮:选择是使用鼠标左键还是右键进行自动点击。
  3. 热键设置:可自定义“开始”和“停止”自动点击的快捷键。默认启动热键为 F6,停止为 F8。
  4. 状态提示:实时显示当前工具的运行状态,例如“准备就绪”、“运行中”、“已停止”等。

🧩 实现核心代码解析

以下是该工具的核心代码片段,使用 tkinter 构建图形界面,pyautogui 控制鼠标点击,keyboard 用于监听热键,threading 实现多线程不阻塞界面:


🧪 使用说明
下载并运行:点击此处下载 EXE 版本

设置点击参数:根据需要输入点击间隔、选择按钮类型。

启动热键监听:程序启动后自动生效。

开始自动点击:按下设定的启动热键(默认 F6),开始自动点击。

停止点击操作:按下停止热键(默认 F8)即可终止点击过程。

⚠️ 注意事项
本工具会模拟真实的鼠标点击行为,请勿在敏感操作场景(如关闭系统、交易确认等)中使用,以免误操作。

请确保运行环境中已安装 Python 并配置了所需依赖:

pip install pyautogui keyboard
(如果你下载的是 EXE 版本,无需手动安装)

如果遇到快捷键无效的情况,尝试以管理员身份运行程序。

鼠标点击时尽量避免频率过高,部分系统或程序可能检测为异常行为。

以下是完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import pyautogui
import time
import keyboard
import threading
from tkinter import *

class AutoClickerGUI:
def __init__(self, master):
self.master = master
master.title("Python 连点器")

self.is_clicking = False
self.click_thread = None

Label(master, text="点击间隔(秒):").grid(row=0, column=0)
self.interval_entry = Entry(master)
self.interval_entry.insert(0, "0.1")
self.interval_entry.grid(row=0, column=1)

Label(master, text="鼠标按钮:").grid(row=1, column=0)
self.button_var = StringVar(value="left")
Radiobutton(master, text="左键", variable=self.button_var, value="left").grid(row=1, column=1)
Radiobutton(master, text="右键", variable=self.button_var, value="right").grid(row=1, column=2)

Label(master, text="开始热键:").grid(row=2, column=0)
self.start_key_entry = Entry(master)
self.start_key_entry.insert(0, "f6")
self.start_key_entry.grid(row=2, column=1)

Label(master, text="停止热键:").grid(row=3, column=0)
self.stop_key_entry = Entry(master)
self.stop_key_entry.insert(0, "f8")
self.stop_key_entry.grid(row=3, column=1)

self.start_button = Button(master, text="开始 (F6)", command=self.toggle_clicking)
self.start_button.grid(row=4, column=0, columnspan=3)

self.status_label = Label(master, text="准备就绪 (按 F6 开始 / F8 停止)", fg="blue")
self.status_label.grid(row=5, column=0, columnspan=3)

self.start_hotkey_listener()

def start_hotkey_listener(self):
def check_hotkeys():
while True:
start_key = self.start_key_entry.get().lower()
stop_key = self.stop_key_entry.get().lower()

if keyboard.is_pressed(start_key):
if not self.is_clicking:
self.master.after(0, self.toggle_clicking)
if keyboard.is_pressed(stop_key):
if self.is_clicking:
self.master.after(0, self.toggle_clicking)
time.sleep(0.1)

listener_thread = threading.Thread(target=check_hotkeys, daemon=True)
listener_thread.start()

def toggle_clicking(self):
if not self.is_clicking:
try:
interval = float(self.interval_entry.get())
button = self.button_var.get()

if interval <= 0:
raise ValueError("间隔时间必须大于0")

self.is_clicking = True
self.start_button.config(text="停止 (F8)")
self.status_label.config(text="运行中...按 " + self.stop_key_entry.get() + " 停止", fg="green")

self.click_thread = threading.Thread(
target=self.auto_clicker,
args=(interval, button),
daemon=True
)
self.click_thread.start()

except ValueError as e:
self.status_label.config(text=f"错误: {str(e)}", fg="red")
else:
self.is_clicking = False
self.start_button.config(text="开始 (F6)")
self.status_label.config(text="已停止 (按 F6 开始)", fg="blue")

def auto_clicker(self, interval, button):
try:
while self.is_clicking:
pyautogui.click(button=button)
time.sleep(interval)
except Exception as e:
self.master.after(0, lambda: self.status_label.config(text=f"错误: {str(e)}", fg="red"))
self.master.after(0, self.toggle_clicking)

if __name__ == "__main__":
root = Tk()
gui = AutoClickerGUI(root)
root.mainloop()