c. 파이썬
[파이썬 / 매크로 만들기](7) Thread 실행 중 강제 종료 버튼 이벤트
로봇쟁이
2024. 8. 23. 12:34
쓰레드가 실행 중에 종료 버튼을 누르면 정상 종료가 안되는 상황이 발생하는데 이를 방지하기 위해서
강제 종료 버튼에 대한 이벤트를 만들어야 한다.
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_()
반응형