保存参数的功能
创建一个文本文件,用来保存用户输入的参数。例如,创建一个名为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
目录下