import sys
from PyQt5.QtWidgets import *
import pyautogui
import threading
class MacroApp(QWidget):
def __init__(self):
super().__init__()
self.initUi()
self.state = 0
def initUi(self):
self.setGeometry(700, 450, 220, 100)
self.setWindowTitle('Macro')
self.btn = QPushButton(self)
self.btn.setText("START") # setText("START &f") shortcut - '&f' = 'Alt+f'
self.btn.setEnabled(True) # Enable, Disable
self.btn.resize(220,100)
self.btn.clicked.connect(self.btnClicked)
# pyautogui.press(['left', 'left', 'left']) # 왼쪽 방향키를 세번 입력
# pyautogui.press('left', presses=3) # 왼쪽 방향키를 세번 입력
# pyautogui.press('left', presses=3, interval=3) # 왼쪽 방향키를 3초에 한번씩 세번 입력
def btnClicked(self):
if self.state == 0:
self.btn.setText("STOP")
self.state = 1
else:
self.btn.setText("START")
self.state = 0
self.macroThread()
def macroThread(self):
self.macro = threading.Timer(1, self.macroThread)
if self.state == 0:
self.macro.cancel()
else:
pyautogui.press('1', presses=1)
self.macro.start()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = MacroApp()
ex.show()
app.exec_()
Thread를 실행하기 위해서 Thread 모듈을 import 시킨다. (기본으로 있는 모듈임으로 설치 필요 없음)
macroThread함수를 하나 만들어서 반복 동작을 위한 1초에 한번씩 함수를 Call하는 타이머를 하나 만든다.
self.macro = threading.Timer(1, self.macroThread)
시작은
self.macro.start()
정지는
self.macro.cancel()
이용하면 된다.
그런데 주의할 점이 있다. Thread는 동작을 시키고 나서 반드시 종료를 시켜줘야 한다.
그렇지 않으면 계속 동작 중으로 되어 있으므로 강제 종료를 시켜줘야 하는 불편함이 생긴다.
그래서 Thread가 켜져 있을 때 강제 닫기 버튼을 누른 경우 어떻게 종료시켜야 하는지 확인해봐야 한다.
반응형
'c. 파이썬' 카테고리의 다른 글
[파이썬 / 증권사 API활용](2) QAxcontainer 사용 및 키움 모의투자 신청 (0) | 2024.08.26 |
---|---|
[파이썬 / 증권사 API활용](1) 키움 Open API+ 적용 (0) | 2024.08.25 |
[파이썬 / 매크로 만들기](8) 키보드 keyboard 입력으로 시작, 정지 (0) | 2024.08.24 |
[파이썬 / 매크로 만들기](7) Thread 실행 중 강제 종료 버튼 이벤트 (0) | 2024.08.23 |
[파이썬 / 매크로 만들기](5) Pyautogui 설치, 키보드 매크로 입력 (0) | 2024.08.21 |
[파이썬 / 매크로 만들기](4) PyQt5 QPushButton 사이즈 변경, Click 이벤트 (0) | 2024.08.20 |
[파이썬 / 매크로 만들기](3) PyQt5 QPushButton 생성, 텍스트, 단축키, 활성 (0) | 2024.08.19 |
[파이썬 / 매크로 만들기](2) PyQt5 Title 입력, GUI 사이즈 조절 (0) | 2024.08.18 |