0. ์คํ ๋ฆฌ

"๊ณต์ ์ ๋ชจ๋ ๊ธฐ๊ณ๋ก ์๋ํ ํ๋๋ผ๋, ์๋ ๋ฒํผ์ ๋ฅ์ด๋ค์ด ์ง์ ๋๋ฌ์ผ ํ๋ค๋ฅ!"
๋๋ฆฌ์ธ No.1
์ ๊ณ ๋ฏผ์ ๋น ์ก์ต๋๋ค. ๋ชจ๋ ์
๋ฌด๋ฅผ ์๋ํ ํ๊ณ ์ถ์๋ฐ, ๊ผญ ์ง์ ๋๋ฌ์ผ ํ๋ ๋ฒํผ์ด ์๊ธฐ ๋๋ฌธ์ด์ฃ .๊ทธ๋ผ, ์ง์ ๋๋ฌ์ผ ํ๋ ๋ฒํผ์ ๋ง๋ค ์ ์๋ ๊ฒ์ผ๊น์? ํน์ ๋ง๋ค ์ ์๋ค๋ฉด, ์ ๋๋ก ๋๋ ธ๋์ง๋ ์ฒดํฌํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ฃ์ ์๋ ์๋ ๊ฒ์ผ๊น์?
1. ๊ธฐํ

2. ๋์์ธ

3. ์ฝ๋
import pyautogui #pip3 install pyautogui import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtCore import QCoreApplication, QTimer class ์์ ์๋ํฌ์ฅํ๋ก๊ทธ๋จ(QWidget): def __init__(self): super().__init__() self.UI์ด๊ธฐํ() def UI์ด๊ธฐํ(self): self.ํฌ์ฅ์นด์ดํธ = 0 self.ํด๋ฆญํ์์นด์ดํธ = 0 self.์์ ํฌ์ฅ์() self.๋ํ์ด๋ฏธ์ง() self.ํฌ์ฅ๋ฒํผ() self.setWindowTitle('์์ ์๋ ํฌ์ฅ ํ๋ก๊ทธ๋จ') self.setGeometry(400, 300, 580, 500) self.show() def ๋ํ์ด๋ฏธ์ง(self): self.๋ํ์ด๋ฏธ์ง๋ผ๋ฒจ = QLabel(self) self.๋ํ์ด๋ฏธ์ง๋ผ๋ฒจ.setPixmap(QPixmap('img/weniv-licat.png').scaled(35, 44)) self.๋ํ์ด๋ฏธ์ง๋ผ๋ฒจ.move(10, 10) def ์์ ํฌ์ฅ์(self): self.์์ ํฌ์ฅ์๋ผ๋ฒจ = QLabel('00 ๋ง๋ฆฌ๊ฐ ํฌ์ฅ๋์์ต๋๋ค.', self) self.์์ ํฌ์ฅ์๋ผ๋ฒจ.setFont(QFont("Helvetica", pointSize=22, weight=2)) self.์์ ํฌ์ฅ์๋ผ๋ฒจ.move(30, 70) def ํฌ์ฅ๋ฒํผ(self): self.์์ ์ค๋น๋ฒํผ = QPushButton('์์ ์ค๋น', self) self.์์ ์ค๋น๋ฒํผ.move(30, 150) self.์์ ์ค๋น๋ฒํผ.setFixedSize(250, 40) self.์์ ๋ค๋ฌ๊ธฐ๋ฒํผ = QPushButton('์์ ๋ค๋ฌ๊ธฐ', self) self.์์ ๋ค๋ฌ๊ธฐ๋ฒํผ.move(300, 150) self.์์ ๋ค๋ฌ๊ธฐ๋ฒํผ.setFixedSize(250, 40) self.์์ ํฌ์ฅ๋ฒํผ = QPushButton('์์ ํฌ์ฅ', self) self.์์ ํฌ์ฅ๋ฒํผ.move(30, 200) self.์์ ํฌ์ฅ๋ฒํผ.setFixedSize(520, 40) self.์์ ํฌ์ฅ๋ฒํผ.clicked.connect(self.countClick) self.ํฌ์ฅ์์๋ฒํผ = QPushButton('ํฌ์ฅ์์', self) self.ํฌ์ฅ์์๋ฒํผ.move(300, 300) self.ํฌ์ฅ์์๋ฒํผ.setFixedSize(250, 40) self.ํฌ์ฅ์์๋ฒํผ.clicked.connect(self.startClick) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ = QLineEdit(self) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.setPlaceholderText('ํด๋ฆญ ๊ฐ๊ฒฉ/ (์ด)') self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.move(30, 300) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ = QLabel('๋ช ์ด ๊ฐ๊ฒฉ์ผ๋ก ํฌ์ฅํ ์ง ์ ๋ ฅํ์ธ์.', self) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.setFont(QFont("Helvetica", pointSize=7)) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.move(30, 340) self.ํ์์ ๋ ฅ์ฐฝ = QLineEdit(self) self.ํ์์ ๋ ฅ์ฐฝ.setPlaceholderText('ํด๋ฆญ ํ์') self.ํ์์ ๋ ฅ์ฐฝ.move(30, 400) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ = QLabel('๋ช ํ ํฌ์ฅํ ์ง ์ ๋ ฅํ์ธ์.', self) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.setFont(QFont("Helvetica", pointSize=7)) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.move(30, 440) def startClick(self): self.timer = QTimer() self.x = 550 #์ ์ฒด ์๋์ฐ์์ ์ขํ๊ฐ์ ๊ฐ์ ธ์ด self.y = 510 self.delay = int(self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.text()) self.timer.start(self.delay * 1000) self.timer.timeout.connect(self.mouseClick) def mouseClick(self): pyautogui.click(self.x, self.y) self.ํด๋ฆญํ์์นด์ดํธ += 1 if self.ํด๋ฆญํ์์นด์ดํธ == int(self.ํ์์ ๋ ฅ์ฐฝ.text()): self.timer.stop() def countClick(self): self.ํฌ์ฅ์นด์ดํธ += 1 self.์์ ํฌ์ฅ์๋ผ๋ฒจ.setText(f'{str(self.ํฌ์ฅ์นด์ดํธ)} ๋ง๋ฆฌ๊ฐ ํฌ์ฅ๋์์ต๋๋ค.') ํ๋ก๊ทธ๋จ๋ฌดํ๋ฐ๋ณต = QApplication(sys.argv) ์คํ์ธ์คํด์ค = ์์ ์๋ํฌ์ฅํ๋ก๊ทธ๋จ() ํ๋ก๊ทธ๋จ๋ฌดํ๋ฐ๋ณต.exec_()
4. ์์ธ ๋ด์ฉ
๋ง์ฐ์ค๋ฅผ ์์ง์ด๋ ์ด๋ฒคํธ, ํค๋ณด๋๋ฅผ ํด๋ฆญํ๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
pip3 install pyautogui
๋ก ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ์ธ์.import pyautogui
๊ณต์ Docs: https://pyautogui.readthedocs.io/en/latest/
์ ์ฒด UI๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์์ ํฌ์ฅ์()
๋ ๋ผ๋ฒจ๋ก ๋ช๋ง๋ฆฌ๊ฐ ํฌ์ฅ๋์๋์ง ํ์ํ ๊ฒ์ด๊ณ ๋ํ์ด๋ฏธ์ง()
๋ ์ด๋ฏธ์ง๋ฅผ ๋์ฐ๋ ๊ฒ์, ํฌ์ฅ๋ฒํผ()
์ ํฌ์ฅ ๋ฒํผ์ ๋๋ฅด๋ฉด self.ํฌ์ฅ์นด์ดํธ
๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ํ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ ๋ํ ๋ผ๋ฒจ์ ์ถ๋ ฅํ๊ณ ์.def UI์ด๊ธฐํ(self): self.ํฌ์ฅ์นด์ดํธ = 0 self.ํด๋ฆญํ์์นด์ดํธ = 0 self.์์ ํฌ์ฅ์() self.๋ํ์ด๋ฏธ์ง() self.ํฌ์ฅ๋ฒํผ() self.setWindowTitle('์์ ์๋ ํฌ์ฅ ํ๋ก๊ทธ๋จ') self.setGeometry(400, 300, 580, 500) self.show()
- self.ํฌ์ฅ์นด์ดํธ : ์ผ๋ง๋ ํฌ์ฅํ์๋์ง ์ ์ฅํ ๋ณ์, ํด๋ฆญํ๋ฉด +1 ๋ฉ๋๋ค.
- self.ํด๋ฆญํ์์นด์ดํธ : ํด๋ฆญ์ด ์ผ๋ง๋ ๋์๋์ง ํ์ธํ๊ณ ์ ๋ ฅ๋ ํ์๋ ๋น๊ตํ์ฌ ํ๋ก๊ทธ๋จ์ Stopํ๋ ์ญํ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
def ํฌ์ฅ๋ฒํผ(self): #...์ค๋ต... self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ = QLineEdit(self) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.setPlaceholderText('ํด๋ฆญ ๊ฐ๊ฒฉ/ (์ด)') self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.move(30, 300) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ = QLabel('๋ช ์ด ๊ฐ๊ฒฉ์ผ๋ก ํฌ์ฅํ ์ง ์ ๋ ฅํ์ธ์.', self) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.setFont(QFont("Helvetica", pointSize=7)) self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.move(30, 340) self.ํ์์ ๋ ฅ์ฐฝ = QLineEdit(self) self.ํ์์ ๋ ฅ์ฐฝ.setPlaceholderText('ํด๋ฆญ ํ์') self.ํ์์ ๋ ฅ์ฐฝ.move(30, 400) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ = QLabel('๋ช ํ ํฌ์ฅํ ์ง ์ ๋ ฅํ์ธ์.', self) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.setFont(QFont("Helvetica", pointSize=7)) self.ํ์์ ๋ ฅ์ฐฝ์ค๋ช ๋ผ๋ฒจ.move(30, 440)
setPlaceholderText
: ์ํฐ๋งํฌ๋ฅผ ํ์ฉํ ํ์ ์ ๋ ฅ์, ํํธ๋ฅผ ์ค ๋ ์ ์ฉ
def startClick(self): self.timer = QTimer() self.x = 550 #์ ์ฒด ์๋์ฐ์์ ์ขํ๊ฐ์ ๊ฐ์ ธ์ด self.y = 510 self.delay = int(self.๊ฐ๊ฒฉ์ ๋ ฅ์ฐฝ.text()) self.num_click = 0 self.timer.start(self.delay * 1000) self.timer.timeout.connect(self.mouseClick)
์คํํธ ๋ฒํผ์ด ํด๋ฆญ๋๋ฉด startClick ํจ์์ ์ฐ๊ฒฐ๋๊ฒ ๋ฉ๋๋ค. QTimer๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ x, y๋ณ์์ ์ขํ๊ฐ์ ์
๋ ฅํฉ๋๋ค. ์ฌ๊ธฐ์ ์ขํ๋ ์๋์ฐ ์๋จ์์๋ถํฐ x, y๊ฐ์
๋๋ค. int๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์๋ก ๋ํ ์ ์์ต๋๋ค. ๋จ์๋ px์
๋๋ค.
์ง์ฐ์๊ฐ ๋ณ์์ ์
๋ ฅ๋ ์ง์ฐ์๊ฐ ๊ฐ์ ๋ฃ์ต๋๋ค. ์๊ฐ ๋จ์๋ ๋ฐ๋ฆฌ์ธ์ปจ๋์
๋๋ค. ํด๋ฆญ๋ ํ์๋ฅผ ์์๋ณด๊ธฐ ์ํ ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํ๊ณ ํ์ด๋จธ๋ฅผ ์์ํฉ๋๋ค. ๋จ์๊ฐ ๋ฐ๋ฆฌ์ธ์ปจ๋์ด๊ธฐ ๋๋ฌธ์ 1000์ ๊ณฑํ์ฌ ์ด ๋จ์๋ก ์คํํ๋๋ก ํฉ๋๋ค.
def mouseClick(self): pyautogui.click(self.x, self.y) self.ํด๋ฆญํ์์นด์ดํธ += 1 if self.ํด๋ฆญํ์์นด์ดํธ == int(self.ํ์์ ๋ ฅ์ฐฝ.text()): self.timer.stop()
- pyautogui๋ฅผ ํตํด ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ๋ฐ์ ์ขํ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํด๋ฆญ๋ ํ์๋ฅผ 1์ฉ ์ฆ๊ฐํฉ๋๋ค(์ฌ๊ธฐ์๋ 1์ด ๋จ์๋ก 1์ฉ ์ฆ๊ฐ)
- ๋ชฉํ์ธ ํด๋ฆญํ์์ ๋๋ฌํ๋ฉด ํ์ด๋จธ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
self.timer.timeout.connect(self.mouseClick)
ํ์ด๋จธ๊ฐ ์ข
๋ฃ๋๋ฉด ๋ง์ฐ์ค๋ก ๋ฒํผ์ ํด๋ฆญํ๊ฒ ๋๊ณ ์๋ ์ฝ๋๊ฐ ์คํ๋๋ฉด์ ํฌ์ฅ ๋ง๋ฆฌ์๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.
def countClick(self): self.ํฌ์ฅ์นด์ดํธ += 1 self.์์ ํฌ์ฅ์๋ผ๋ฒจ.setText(f'{str(self.ํฌ์ฅ์นด์ดํธ)} ๋ง๋ฆฌ๊ฐ ํฌ์ฅ๋์์ต๋๋ค.')
5. ์คํ ํ๋ฉด

