Python制作鼠标连点器(范围、间隔时间)

保存参数的功能

创建一个文本文件,用来保存用户输入的参数。例如,创建一个名为config.txt的文本文件,将其放在与应用程序脚本相同的目录中。

import tkinter as tk
import threading
import random
import time
import os
import pyautogui
from pynput import keyboard


class AutoClickerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("自动点击器")

        self.start_button = tk.Button(root, text="开始点击", command=self.start_clicking)
        self.stop_button = tk.Button(root, text="停止点击", command=self.stop_clicking)

        self.start_button.pack()
        self.stop_button.pack()

        self.x_min_label = tk.Label(root, text="X轴最小值:")
        self.x_max_label = tk.Label(root, text="X轴最大值:")
        self.y_min_label = tk.Label(root, text="Y轴最小值:")
        self.y_max_label = tk.Label(root, text="Y轴最大值:")
        self.min_delay_label = tk.Label(root, text="最小间隔时间 (秒):")
        self.max_delay_label = tk.Label(root, text="最大间隔时间 (秒):")

        self.x_min_label.pack()
        self.x_min_entry = tk.Entry(root)
        self.x_min_entry.pack()

        self.x_max_label.pack()
        self.x_max_entry = tk.Entry(root)
        self.x_max_entry.pack()

        self.y_min_label.pack()
        self.y_min_entry = tk.Entry(root)
        self.y_min_entry.pack()

        self.y_max_label.pack()
        self.y_max_entry = tk.Entry(root)
        self.y_max_entry.pack()

        self.min_delay_label.pack()
        self.min_delay_entry = tk.Entry(root)
        self.min_delay_entry.pack()

        self.max_delay_label.pack()
        self.max_delay_entry = tk.Entry(root)
        self.max_delay_entry.pack()

        self.clicking = False
        self.keyboard_listener = None

        # 加载参数
        self.load_parameters()

    def start_clicking(self):
        if not self.clicking:
            self.clicking = True
            self.disable_inputs()
            x_min = int(self.x_min_entry.get())
            x_max = int(self.x_max_entry.get())
            y_min = int(self.y_min_entry.get())
            y_max = int(self.y_max_entry.get())
            min_delay = float(self.min_delay_entry.get())
            max_delay = float(self.max_delay_entry.get())
            self.click_thread = threading.Thread(target=self.perform_clicking,
                                                 args=(x_min, x_max, y_min, y_max, min_delay, max_delay))
            self.click_thread.start()
            self.start_button.config(state="disabled")
            self.stop_button.config(state="normal")
            # 使用pynput库监听F8键
            self.keyboard_listener = keyboard.Listener(on_press=self.on_key_press)
            self.keyboard_listener.start()

    def stop_clicking(self):
        if self.clicking:
            self.clicking = False
            self.click_thread.join()
            self.enable_inputs()
            self.start_button.config(state="normal")
            self.stop_button.config(state="disabled")
            # 停止监听F8键
            if self.keyboard_listener:
                self.keyboard_listener.stop()
            # 保存参数
            self.save_parameters()

    def perform_clicking(self, x_min, x_max, y_min, y_max, min_delay, max_delay):
        while self.clicking:
            x = random.randint(x_min, x_max)
            y = random.randint(y_min, y_max)
            pyautogui.moveTo(x, y, duration=0.2)
            pyautogui.click()
            delay = random.uniform(min_delay, max_delay)
            time.sleep(delay)

    def on_key_press(self, key):
        if key == keyboard.Key.f8:
            self.stop_clicking()

    def disable_inputs(self):
        self.x_min_entry.config(state="disabled")
        self.x_max_entry.config(state="disabled")
        self.y_min_entry.config(state="disabled")
        self.y_max_entry.config(state="disabled")
        self.min_delay_entry.config(state="disabled")
        self.max_delay_entry.config(state="disabled")

    def enable_inputs(self):
        self.x_min_entry.config(state="normal")
        self.x_max_entry.config(state="normal")
        self.y_min_entry.config(state="normal")
        self.y_max_entry.config(state="normal")
        self.min_delay_entry.config(state="normal")
        self.max_delay_entry.config(state="normal")

    def load_parameters(self):
        # 从配置文件中加载参数
        if os.path.exists("config.txt"):
            with open("config.txt", "r") as file:
                lines = file.readlines()
                if len(lines) == 6:
                    x_min = int(lines[0].strip())
                    x_max = int(lines[1].strip())
                    y_min = int(lines[2].strip())
                    y_max = int(lines[3].strip())
                    min_delay = float(lines[4].strip())
                    max_delay = float(lines[5].strip())
                    self.loaded_parameters = (x_min, x_max, y_min, y_max, min_delay, max_delay)
                else:
                    self.loaded_parameters = (1, 2, 1, 2, 1.0, 2.0)  # 默认参数
        else:
            self.loaded_parameters = (1, 2, 1, 2, 1.0, 2.0)  # 默认参数

        # 设置参数输入框的值
        x_min, x_max, y_min, y_max, min_delay, max_delay = self.loaded_parameters
        self.x_min_entry.delete(0, tk.END)
        self.x_min_entry.insert(0, str(x_min))
        self.x_max_entry.delete(0, tk.END)
        self.x_max_entry.insert(0, str(x_max))
        self.y_min_entry.delete(0, tk.END)
        self.y_min_entry.insert(0, str(y_min))
        self.y_max_entry.delete(0, tk.END)
        self.y_max_entry.insert(0, str(y_max))
        self.min_delay_entry.delete(0, tk.END)
        self.min_delay_entry.insert(0, str(min_delay))
        self.max_delay_entry.delete(0, tk.END)
        self.max_delay_entry.insert(0, str(max_delay))

    def save_parameters(self):
        # 保存参数到配置文件
        x_min = int(self.x_min_entry.get())
        x_max = int(self.x_max_entry.get())
        y_min = int(self.y_min_entry.get())
        y_max = int(self.y_max_entry.get())
        min_delay = float(self.min_delay_entry.get())
        max_delay = float(self.max_delay_entry.get())
        with open("config.txt", "w") as file:
            file.write(str(x_min) + "\n")
            file.write(str(x_max) + "\n")
            file.write(str(y_min) + "\n")
            file.write(str(y_max) + "\n")
            file.write(str(min_delay) + "\n")
            file.write(str(max_delay))


if __name__ == "__main__":
    root = tk.Tk()
    app = AutoClickerApp(root)
    root.mainloop()

打包文件

将.py文件打包为.exe文件,这样即使电脑不含Python也能运行,方法如下:

  • 安装pyinstaller
pip install pyinstaller
  • 在源码所在目录执行
pyinstaller -F -w MouseClick.py

即可生成.exe文件,位于/dist目录下

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值