개발관련/Python

pynput로 단축키 만들기(with python )

Dol42 2021. 1. 28. 21:06

데이터라벨링 작업을 진행하면서 여러 데이터라벨링 프로그램을 접하게 되었다. 

작업중 del 키를 많이 쓰게 되었는데 옆으로 넘기는 키인 a,d 를 사용하다가 저멀리 딜리트 키까지 손을 옮기려니
작업효율이 너무 떨어진다. 

프로그램을 뜯어서 볼 수는 없으니 대신 키보드에서 어떤키가 눌리는지 확인하고 키를 대체하여 내가 원하는 기능을 수행하도록하는 간단한 파이썬 스크립트를 제작했다. 

pyautogui를 사용하려다가 pynput을 사용했다. 

기본적으로는 키보드 후킹 -> 키 대체 -> 다른키로 입력 이런 식으로 동작하도록 하였고, 프로그램 종료를 하기 위해 esc가 눌리면 프로그램이 종료 될 수 있도록 하였다. 

exe 파일로 만들어서 다른 라벨러들에게도 공유 가능하도록 하였다. 

pyinstaller 를 사용하여 제작하는데 만들고 나니 자꾸 import error가 나는 것이 아닌가.

.spec파일을 바꾸고 따로 추가해주어도 추가되지 않았다.

 

pyinstaller의 버전을 낮춰주고 진행하니 정상적으로 동작되었다.  

 

 

소스코드

중복입력을 방지하고자 키보드 누르고 떼면서 동작하도록 코드를 작성했다. 

 코드를 실행하면 스페이스바를 누르면 스페이스바 정상기능 이후 + del키가 눌렸다가 떼지는 것처럼 동작한다. 

추후 소스를 가지고 키후킹을 진행해 단축키가 동작 하도록 하는 여러 프로젝트에 쓰일 수 있을 것 같다. 

 

 

#단축키중 작업효율을 위해 spacebar로 del키 기능이 가능하도록 하는 코드입니다. 
#만든이 : doljoki
#https://doljokilab.tistory.com/

#키 후킹을 위한 파이썬 라이브러리 임포트 
import pynput
import os

kp = pynput.keyboard.Controller()
print("delete키를 spacebar로 대체하는 프로그램입니다.(ver 0.1)")
print("사용시 발생하는 문제는 개발자가 따로 책임지지 않습니다.")
print("프로그램 실행중, 'esc'누르면 종료됩니다.")
print("소스코드 공개 : https://github.com/dol42/fsHOTKEY/blob/master/fsstrans.py ")


def on_press(key):
    return

#중복키 방지를 위해 키보드에서 뗐을경우 실행하는 함수
def on_release(key):
    if key == pynput.keyboard.Key.esc:
        print("프로그램 종료")
        return False
    elif key == pynput.keyboard.Key.space:
        kp.press(pynput.keyboard.Key.delete)
        kp.release(pynput.keyboard.Key.delete)

# 키 후킹용 리스너 실행
listener = pynput.keyboard.Listener(on_press=on_press,on_release=on_release)
listener.start()

os.system("pause")
반응형

'개발관련 > Python' 카테고리의 다른 글

[python] 네이버카페 크롤링 코드  (0) 2021.01.28
[개발환경]아나콘다 설치하기  (0) 2020.06.01