0. 스토리

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/450616a2-1b47-4f22-b238-7a7329966e46/44.png

"공정은 모두 기계로 자동화 하더라도, 아래 버튼은 냥이들이 직접 눌러야 한다냥!"

대리인 No.1은 고민에 빠졌습니다. 모든 업무를 자동화 하고 싶은데, 꼭 직접 눌러야 하는 버튼이 있기 때문이죠.

그럼, 직접 눌러야 하는 버튼은 만들 수 없는 것일까요? 혹시 만들 수 있다면, 제대로 눌렸는지도 체크할 수 있는 기능을 넣을 수는 없는 것일까요?

1. 기획

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2ec84f71-9c39-4a99-ae10-bc8bbafd08e4/9.png

2. 디자인

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fe331417-537e-4538-a7e4-cafcf7cac567/10.png

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/

Welcome to PyAutoGUI's documentation! - PyAutoGUI documentation