- PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램
- 1. PyQt5 소개 (Introduction)
- 2. PyQt5 설치 (Installation)
- 3. PyQt5 기초 (Basics)
- 4. PyQt5 레이아웃 (Layout)
- 5. PyQt5 위젯 (Widget)
- QPushButton
- QLabel
- QCheckBox
- QRadioButton
- QComboBox
- QLineEdit
- QLineEdit (Advanced)
- QProgressBar
- QSlider & QDial
- QSplitter
- QGroupBox
- QTabWidget
- QTabWidget (Advanced)
- QPixmap
- QCalendarWidget
- QSpinBox
- QDoubleSpinBox
- QDateEdit
- QTimeEdit
- QDateTimeEdit
- QTextBrowser
- QTextBrowser (Advanced)
- QTextEdit
- QTableWidget
- QTableWidget (Advanced)
- 6. PyQt5 다이얼로그 (Dialog)
- 7. PyQt5 시그널과 슬롯 (Signal&Slot)
- 8. PyQt5 그림 그리기 (Updated)
- 9. PyQt5 실행파일 만들기 (PyInstaller)
- 10. PyQt5 프로그램 예제 (Updated)
- ▷ PDF ebook
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
(x, y) 위치 반복 클릭 프로그램¶
PyQt5 와 PyAutoGUI 라이브러리를 사용하면 단순한 작업을 반복하는 매크로 프로그램을 만들 수 있습니다.
클릭할 위치 (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을 입력하면 계속해서 클릭을 수행합니다.
만약 중간에 반복 클릭을 종료하고 싶다면 마우스 커서를 화면의 왼쪽 위 모서리로 이동 하면 됩니다.