c. 파이썬
[파이썬 / 매크로 만들기](8) 키보드 keyboard 입력으로 시작, 정지
로봇쟁이
2024. 8. 24. 13:04
키보드로 입력을 받기 위해서 cmd창에서 keyboard 모듈을 설치한다.
설치가 되었으면 모듈을 추가한다.
import keyboard
모듈을 추가했으니 키보드 입력을 받아야 하는데 어떻게 받을 것인지 고민이 된다.
프로그램이 상시로 켜져 있을때는 상시 키보드 입력 값을 받아야 함으로 역시 쓰레드를 쓰도록 한다.
def keyThread(self):
self.key = threading.Timer(0.01, self.keyThread)
if keyboard.is_pressed('f11'):
if self.state == 0:
self.btn.setText("STOP")
self.state = 1
self.macroThread()
if keyboard.is_pressed('f12'):
if self.state == 1:
self.btn.setText("START")
self.state = 0
self.key.start()
keyThread는 최대한 짧은 시간안에 인식할 수 있도록 0.01초에 한번씩 동작하도록 했다.
키보드는 F11키는 START 버튼, F12키는 STOP 버튼과 동일하게 인식할 수 있도록 하였다.
import sys
from PyQt5.QtWidgets import *
import pyautogui
import threading
import keyboard
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초에 한번씩 세번 입력
self.keyThread()
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 keyThread(self):
self.key = threading.Timer(0.01, self.keyThread)
if keyboard.is_pressed('f11'):
if self.state == 0:
self.btn.setText("STOP")
self.state = 1
self.macroThread()
if keyboard.is_pressed('f12'):
if self.state == 1:
self.btn.setText("START")
self.state = 0
self.key.start()
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()
self.key.cancel()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = MacroApp()
ex.show()
app.exec_()
이제 간단히 동작하는 매크로 프로그램이 완성되었다.
응용할 건 무궁무진하겠지만 원하던 프로그램이 완성되었으니 이것으로 마무리 하고 또 다른 프로그램을 시도해 봐야겠다
끝!
반응형