쓰레드가 실행 중에 종료 버튼을 누르면 정상 종료가 안되는 상황이 발생하는데 이를 방지하기 위해서
강제 종료 버튼에 대한 이벤트를 만들어야 한다.
def closeEvent(self, QCloseEvent):
이제 종료 버튼을 누르면 closeEvent 함수가 동작한다.
그럼 기존 코드에 closeEvent 함수를 넣어서 macro 함수를 종료시켜주면 된다.
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()
def closeEvent(self, QCloseEvent):
if self.state == 1:
self.macro.cancel()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = MacroApp()
ex.show()
app.exec_()
반응형
'c. 파이썬' 카테고리의 다른 글
[파이썬 / 증권사 API활용](3) OpenAPI+ 메소드 사용 (0) | 2024.08.27 |
---|---|
[파이썬 / 증권사 API활용](2) QAxcontainer 사용 및 키움 모의투자 신청 (0) | 2024.08.26 |
[파이썬 / 증권사 API활용](1) 키움 Open API+ 적용 (0) | 2024.08.25 |
[파이썬 / 매크로 만들기](8) 키보드 keyboard 입력으로 시작, 정지 (0) | 2024.08.24 |
[파이썬 / 매크로 만들기](6) Thread 실행, 종료 (0) | 2024.08.22 |
[파이썬 / 매크로 만들기](5) Pyautogui 설치, 키보드 매크로 입력 (0) | 2024.08.21 |
[파이썬 / 매크로 만들기](4) PyQt5 QPushButton 사이즈 변경, Click 이벤트 (0) | 2024.08.20 |
[파이썬 / 매크로 만들기](3) PyQt5 QPushButton 생성, 텍스트, 단축키, 활성 (0) | 2024.08.19 |