pynput 이란, 키보드와 마우스를 제어할 수 있는 파이썬 라이브러리이다.
이 라이브러리를 통해 키보드와 마우스 입력을 하고, 리스너 등록을 통해 키보드와 마우스로부터 들어오는 값을 가져올 수도 있다.
1. pynput 설치 - 터미널에서 하단 명령어를 입력한다
- pip install pynput
2. 키보드 입력하기
우리가 알고 있듯, 키보드는 눌렀다(press) 떼어야(release) 입력이 완료된다. 물론 누른채(pressed) 다른 키를 입력해야 하는 경우도 있다.
하기 예제를 통해, 간단한 입력과(press, release) 누른채(pressed) 입력의 동작을 살펴보자
from pynput.keyboard import Key, Controller
import time
class TestKeyboard:
def __init__(self):
self.keyboard = Controller()
def inputKey(self, key):
self.keyboard.press(key)
self.keyboard.release(key)
def inputKeyWithShift(self, key):
with self.keyboard.pressed(Key.shift):
self.keyboard.press(key)
self.keyboard.release(key)
def inputKeyWithControl(self, key):
with self.keyboard.pressed(Key.ctrl):
self.keyboard.press(key)
self.keyboard.release(key)
def inputKeyWith(self, with_key, key):
with self.keyboard.pressed(with_key):
self.keyboard.press(key)
self.keyboard.release(key)
def typeString(self, string):
self.keyboard.type(string)
if __name__ == '__main__':
kb = TestKeyboard()
time.sleep(5) #테스트를 위해 5초 이후 입력이 시작되게 하였다
kb.inputKey('a')
kb.inputKey(Key.enter)
kb.inputKeyWithShift('b')
kb.typeString('gozz`s tistory')
각 함수들은 키 하나하나 입력과, shift키와 같은 특수키를 누른채 입력, 그리고 string을 입력하는 예제이다.
특수키의 경우 Key를 통해 다양하게 지정할 수 있으므로 참고하자.
3. 키보드 리스너
pynput을 통해 입력을 해보았으니, 이제 실제 키보드에서 입력된 값을 받아와보자.
from pynput import keyboard
def on_press(key):
print('Key %s pressed' % key)
def on_release(key):
print('Key %s released' %key)
if key == keyboard.Key.esc: #esc 키가 입력되면 종료
return False
# 리스너 등록방법1
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
# 리스너 등록방법2
# listener = keyboard.Listener(
# on_press=on_press,
# on_release=on_release)
# listener.start()
# listener.join()
키보드 특수키에 대해서도 무슨 키가 눌렸는지 출력이 되는 모습이다. listener 등록 방법은 2개로 편한 것을 골라 쓰면 된다.
키 하나하나의 값이 리스너를 통해 들어오는 방법을 알게 되었다.
하지만 키보드를 사용하면서 단축키를 설정할 때 여러개의 값이 동시에 눌려 있는지 확인이 필요할 때가 있다.
예제를 통해 알아보자
from pynput import keyboard
current_pressed = set()
def on_press(key):
current_pressed.add(key)
print('Key %s pressed' % current_pressed)
def on_release(key):
print('Key %s released' %key)
if key == keyboard.Key.esc:
return False
if key in current_pressed:
current_pressed.remove(key)
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
결과와 같이 여러값이 동시에 입력되어 있는 경우 어떤 값들이 눌려져 있는지와, 키를 떼었을 경우 삭제되는 것까지 볼 수 있다.
'개발 > Python' 카테고리의 다른 글
[파이썬] pynput을 이용한 마우스 제어 (3) | 2020.07.29 |
---|---|
[파이썬] 한글 바이트 변환 방법 (0) | 2020.07.27 |
[파이썬] 시리얼통신 (pyserial) (7) | 2020.07.26 |
[파이썬] 랜덤모듈 (random module) (0) | 2020.07.25 |
[파이썬] datetime으로 날짜, 시간 다루기 (0) | 2020.07.23 |