吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2917|回复: 39
收起左侧

[Python 原创] 鼠标自动点击程序

  [复制链接]
gargeburt 发表于 2025-11-12 10:22
本帖最后由 gargeburt 于 2025-11-24 13:50 编辑

有时参加活动要点连续点击按钮,为了减轻手指压力,开发了此款软件,界面是用PYQT5做,打包前要安装好Pyqt5,具体功能得用法看界面即可。
图片.png
[Python] 纯文本查看 复制代码
import datetime
import sys

from PyQt5.QtCore import pyqtSignal
from system_hotkey import SystemHotkey
from PyQt5.QtGui import QIcon
from pymouse import PyMouse  # 调用Pymouse模块

import time  # 调用时间模块(考略到网站点击延时)
from PyQt5.QtWidgets import QApplication, QMainWindow, QStatusBar

from resource.mainwindows import Ui_MainWindow
import threading


class WindowPane(QMainWindow, Ui_MainWindow):
    sig_keyhot = pyqtSignal(str)
    addstatusbar = pyqtSignal(str)

    def __init__(self, parent=None, *args, **kwargs):
        super().__init__()
        self.setupUi(self)
        # 2. 设置我们的自定义热键响应函数
        self.sig_keyhot.connect(self.MKey_pressEvent)
        # 3. 初始化两个热键
        self.hk_start, self.hk_stop, self.hk_coords = SystemHotkey(), SystemHotkey(), SystemHotkey()
        # 4. 绑定快捷键和对应的信号发送函数
        self.hk_start.register(('control', 'f7'), callback=lambda x: self.send_key_event("start"))
        self.hk_stop.register(('control', 'f8'), callback=lambda x: self.send_key_event("stop"))
        self.hk_coords.register(('control', 'f9'), callback=lambda x: self.send_key_event("coords"))

        self.thread_stop = threading.Event()
        if self.thread_stop.isSet():
            self.thread_stop.clear()
        self.thread_running = False
        self.stopButton = False
        self.beginTime = None
        self.addstatusbar.connect(self.showMessage)

    # 热键处理函数
    def MKey_pressEvent(self, i_str):
        if i_str == 'start':
            self.startClick()
        if i_str == 'stop':
            self.stopClick()
        if i_str == 'coords':
            self.getCoords()

    # 热键信号发送函数(将外部信号,转化成qt信号)
    def send_key_event(self, i_str):
        self.sig_keyhot.emit(i_str)

    def getCoords(self):
        m = PyMouse()
        self.spinBox.setValue(m.position()[0])
        self.spinBox_2.setValue(m.position()[1])

    def startClick(self):
        try:
            self.beginTime = datetime.datetime.now()
            if not self.thread_running:
                ts = threading.Thread(target=self.thread_start, args=(), daemon=True)
                ts.start()
                self.thread_running = True
        except Exception as e:
            print(e)

    def stopClick(self):
        self.stopButton = True

    def showMessage(self, text):
        self.statusbar.showMessage(text)

    def thread_start(self):
        try:
            m = PyMouse()
            startTime = time.clock()
            timeCheck = True
            clickNum = 0
            while not self.stopButton and timeCheck:
                # m.move(self.spinBox.value(), self.spinBox_2.value())  # 鼠标移动坐标(x,y)
                m.click(self.spinBox.value(), self.spinBox_2.value())  # 鼠标点击坐标(x,y)
                clickNum += 1
                if self.spinBox_4.value():
                    time.sleep(self.spinBox_4.value() / 1000)
                else:
                    time.sleep(0.05)
                if self.spinBox_3.value():
                    timeCheck = (startTime + self.spinBox_3.value()) > float(time.clock())
                self.addstatusbar.emit(
                    '运行时间' + str(
                        (datetime.datetime.now() - self.beginTime).seconds) + '秒' + '      点击' + str(clickNum) + '次')
            self.stopButton = False
            self.thread_running = False
        except Exception as e:
            print(e)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = WindowPane()
    MainWindow.show()
    desk = QApplication.desktop()
    rect = desk.availableGeometry()
    sys.exit(app.exec_())

在代码文件夹中新建Resource目录,并新建Pyqt界面代码文件mainwindows.py,代码如下
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindows.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(251, 153)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.gridLayout = QtWidgets.QGridLayout(self.widget)
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.spinBox = QtWidgets.QSpinBox(self.widget)
        self.spinBox.setMaximum(9999)
        self.spinBox.setObjectName("spinBox")
        self.gridLayout.addWidget(self.spinBox, 0, 1, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 2, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.spinBox_2 = QtWidgets.QSpinBox(self.widget)
        self.spinBox_2.setMaximum(9999)
        self.spinBox_2.setObjectName("spinBox_2")
        self.gridLayout.addWidget(self.spinBox_2, 1, 1, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout.addWidget(self.pushButton_2, 1, 2, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
        self.spinBox_3 = QtWidgets.QSpinBox(self.widget)
        self.spinBox_3.setMaximum(9999999)
        self.spinBox_3.setObjectName("spinBox_3")
        self.gridLayout.addWidget(self.spinBox_3, 2, 1, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
        self.spinBox_4 = QtWidgets.QSpinBox(self.widget)
        self.spinBox_4.setMaximum(99999)
        self.spinBox_4.setObjectName("spinBox_4")
        self.gridLayout.addWidget(self.spinBox_4, 3, 1, 1, 1)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setPointSize(10)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.gridLayout.addWidget(self.pushButton_3, 2, 2, 1, 1)
        self.verticalLayout.addWidget(self.widget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 251, 18))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.startClick)
        self.pushButton_2.clicked.connect(MainWindow.stopClick)
        self.pushButton_3.clicked.connect(MainWindow.getCoords)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MouseAutoClick"))
        self.label.setText(_translate("MainWindow", "X坐标"))
        self.pushButton.setText(_translate("MainWindow", "开始(Ctrl+F7)"))
        self.label_2.setText(_translate("MainWindow", "Y坐标"))
        self.pushButton_2.setText(_translate("MainWindow", "停止(Ctrl+F8)"))
        self.label_3.setText(_translate("MainWindow", "持续点击时间(s)"))
        self.label_4.setText(_translate("MainWindow", "点击间隔(ms)"))
        self.pushButton_3.setText(_translate("MainWindow", "坐标获取(Ctrl+F9)"))


应网友要求,加入打包好的文件供各位下载
通过网盘分享的文件:MouseClick.rar
链接: https://pan.baidu.com/s/1hvb49n8p4jvvCUjpzacEYQ 提取码: 8hp7 复制这段内容后打开百度网盘手机App,操作更方便哦

免费评分

参与人数 5吾爱币 +10 热心值 +4 收起 理由
aisini + 1 + 1 谢谢@Thanks!
chy1503 + 1 用心讨论,共获提升!
qpgwz + 1 我很赞同!
hrh123 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Mackenzie + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cxyqsau 发表于 2025-11-13 09:18
感谢楼主分享,先收藏了
 楼主| gargeburt 发表于 2025-11-24 13:55
it598 发表于 2025-11-24 13:44
谢谢分享!怎么打包成EXE文件,我不会,有打好包的吗?

可用pyinstaller或nukia打包,但打包前要把环境和库装好,我编辑主题加入打包好的Exe了,等审核通过就能下载了
CenY03 发表于 2025-11-12 17:11
Mackenzie 发表于 2025-11-12 20:41
支持楼主
chuk 发表于 2025-11-13 07:49
我得试试, 最近在用鼠大侠, 正好用上.
chenyucai 发表于 2025-11-13 09:08
先收藏了,感谢楼主
hjj168 发表于 2025-11-13 09:59
好像不错,工作用鼠标固定点击比较多
smallben 发表于 2025-11-13 10:14
这个感觉不错呀,小工具先收藏了
当初遇你时 发表于 2025-11-13 10:16
最近正好需要这个
feng0945 发表于 2025-11-13 10:21
感谢楼主分享,先收藏了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-19 20:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表