Python连点器 PyQt6+pynput

鼠标宏按键不够、容易误触,因此写了这个电脑连点器

Python连点器 PyQt6+pynput_第1张图片

通过Python多线程+pynput实现连点操作

核心部分代码:

import threading
import time

from pynput.keyboard import Listener, Controller as KeyboardController, Key
from pynput.mouse import Button, Controller as MouseController


class AutoClicker:
    def __init__(self):

        self.mouse = MouseController()
        self.keyboard = KeyboardController()
        self.event = threading.Event()
        self.listener = None
        self.clicker = None
        self.interval = None

    def listen(self, key):
        if key == Key.left:
            self.event.set()
        if key == Key.right:
            self.event.clear()

    def delay_ms(self, ms):
        end_time = time.perf_counter() + ms
        while time.perf_counter() < end_time:
            pass

    def click(self):
        while True:
            self.event.wait()
            self.mouse.click(Button.left)
            self.delay_ms(self.interval)

    def start(self, interval):
        self.interval = interval
        self.listener = Listener(on_press=self.listen)
        self.clicker = threading.Thread(name='clicker', target=self.click, daemon=True)
        self.listener.start()
        self.clicker.start()

    def stop(self):
        if self.listener:
            self.listener.stop()

图形界面使用pyqt6实现

# Form implementation generated from reading ui file 'clicker.py'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.

import sys

from PyQt6 import QtCore
from PyQt6.QtWidgets import *

from clicker import AutoClicker
from untitled import Ui_MainWindow


def run_stop():
    if ui.pushButton.text() == "运行":
        autoclicker.start(ui.spinBox.value() / 1000)
        ui.radioButton.setEnabled(False)
        ui.radioButton_2.setEnabled(False)
        ui.radioButton_3.setEnabled(False)
        ui.spinBox.setEnabled(False)
        ui.label_2.setEnabled(False)
        ui.pushButton.setText("停止")
    else:
        autoclicker.stop()
        ui.radioButton.setEnabled(True)
        ui.radioButton_2.setEnabled(True)
        ui.radioButton_3.setEnabled(True)
        ui.spinBox.setEnabled(True)
        ui.label_2.setEnabled(True)
        ui.pushButton.setText("运行")


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.dragPos = None
        self.setWindowFlags(QtCore.Qt.WindowType.WindowCloseButtonHint)

    def mousePressEvent(self, event):
        self.dragPos = event.globalPosition().toPoint()

    def mouseMoveEvent(self, event):
        self.move(self.pos() + event.globalPosition().toPoint() - self.dragPos)
        self.dragPos = event.globalPosition().toPoint()
        event.accept()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)

    ui.spinBox.setMinimum(10)
    ui.spinBox.setMaximum(100000)
    ui.pushButton.clicked.connect(run_stop)
    ui.radioButton.clicked.connect(lambda x: ui.spinBox.setValue(10))
    ui.radioButton_2.clicked.connect(lambda x: ui.spinBox.setValue(50))
    ui.radioButton_3.clicked.connect(lambda x: ui.spinBox.setValue(100))

    autoclicker = AutoClicker()
    ui.radioButton_2.click()
    window.show()
    sys.exit(app.exec())

你可能感兴趣的:(笔记)