(x, y) 위치 반복 클릭 프로그램

PyQt5PyAutoGUI 라이브러리를 사용하면 단순한 작업을 반복하는 매크로 프로그램을 만들 수 있습니다.

../_images/9_1_intro.png

화면의 특정 지점을 반복해서 클릭하기.

클릭할 위치 (x, y)와 클릭 사이의 간격, 그리고 클릭 횟수를 입력하면, 그 위치를 반복해서 클릭하는 프로그램을 만들어 보겠습니다.


예제

## Ex 10-1. (x, y) 위치 반복 클릭 프로그램.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer
import pyautogui


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.x_le = QLineEdit(self)
        self.y_le = QLineEdit(self)
        self.delay_le = QLineEdit(self)
        self.num_le = QLineEdit(self)
        self.start_btn = QPushButton('Start', self)

        self.x, self.y, self.delay = 0, 0, 0
        self.num_click = 0
        self.initUI()

    def initUI(self):
        self.x_le.move(20, 20)
        self.x_le.setPlaceholderText('x 위치')

        self.y_le.move(160, 20)
        self.y_le.setPlaceholderText('y 위치')

        self.delay_le.move(20, 60)
        self.delay_le.setPlaceholderText('클릭 사이 간격 (초)')

        self.num_le.move(160, 60)
        self.num_le.setPlaceholderText('클릭 횟수')

        self.start_btn.move(110, 100)
        self.start_btn.clicked.connect(self.start_btn_click)

        self.setWindowTitle('Click')
        self.setGeometry(400, 400, 300, 150)
        self.show()

    def start_btn_click(self):
        self.timer = QTimer()
        self.x = int(self.x_le.text())
        self.y = int(self.y_le.text())
        self.delay = int(self.delay_le.text())
        self.num_click = 0

        self.timer.start(self.delay * 1000)
        self.timer.timeout.connect(self.mouse_click)

    def mouse_click(self):
        pyautogui.click(self.x, self.y)
        self.num_click += 1

        if self.num_click == int(self.num_le.text()):
            self.timer.stop()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())


설명

self.x_le = QLineEdit(self)
self.y_le = QLineEdit(self)
self.delay_le = QLineEdit(self)
self.num_le = QLineEdit(self)
self.start_btn = QPushButton('Start', self)

프로그램에 필요한 위젯들을 만들어줍니다.

self.x_le, self.y_le, self.delay_le, self.num_le는 각각 클릭할 x, y 위치, 클릭 사이의 간격, 클릭 횟수를 입력받기 위한 줄 편집기 위젯입니다.

self.start_btn은 시작 버튼입니다.



self.x, self.y, self.delay = 0, 0, 0
self.num_click = 0

self.x, self.y, self.delay, self.num_click은 각각 입력한 x, y 위치, 클릭 사이 간격, 클릭 횟수를 저장하기 위한 변수입니다.



self.x_le.move(20, 20)
self.x_le.setPlaceholderText('x 위치')

self.y_le.move(160, 20)
self.y_le.setPlaceholderText('y 위치')

self.delay_le.move(20, 60)
self.delay_le.setPlaceholderText('클릭 사이 간격 (초)')

self.num_le.move(160, 60)
self.num_le.setPlaceholderText('클릭 횟수')

self.start_btn.move(110, 100)
self.start_btn.clicked.connect(self.start_btn_click)

만들어준 위젯을 절대적 레이아웃을 이용해서 적절한 위치에 배치합니다.

setPlaceholderText() 메서드는 줄 편집기 위젯에 표시될 설명을 위한 텍스트를 설정합니다.

시작 버튼 (self.start_btn)을 클릭하면, self.start_btn_click 메서드가 실행됩니다.



def start_btn_click(self):
    self.timer = QTimer()
    self.x = int(self.x_le.text())
    self.y = int(self.y_le.text())
    self.delay = int(self.delay_le.text())
    self.num_click = 0

    self.timer.start(self.delay * 1000)
    self.timer.timeout.connect(self.mouse_click)

start_btn_click 메서드가 실행되면 우선 QTimer() 클래스를 만들고,

사용자가 입력한 값들을 가져옵니다. text() 메서드는 줄 편집기 위젯에 입력한 값을 반환합니다.

start() 메서드를 통해 타이머가 실행되면 self.delay (초) 간격으로 self.mouse_click 메서드가 반복해서 실행됩니다.



def mouse_click(self):
    pyautogui.click(self.x, self.y)
    self.num_click += 1

    if self.num_click == int(self.num_le.text()):
        self.timer.stop()

pyautogui.click(x, y)는 입력한 x, y 위치를 한 번 클릭하는 함수입니다.

클릭을 수행한 후에 self.num_click을 1만큼 증가시키고, self.num_click이 입력한 횟수에 도달하면 타이머를 중지해서 반복 클릭이 종료됩니다.

만약 클릭 횟수에 0을 입력하면 계속해서 클릭을 수행합니다.

만약 중간에 반복 클릭을 종료하고 싶다면 마우스 커서를 화면의 왼쪽 위 모서리로 이동 하면 됩니다.



결과

../_images/9_1_repeated_click.png

그림 10-1. (x, y) 위치 반복 클릭 프로그램.



이전글/다음글