섹션8 파이썬 실전 프로그래밍 > 나만의 단축키 만들기 스마트 > 함수호출불가현상
820
작성한 질문수 1
나만의 단축키 만들기(스마트)에서 코드를 영상과 똑같이 타이핑해서 실행했는데도 함수1이 호출이 안되시는 분들을 위해 공유합니다. 우선 첫번째 그림에서 1, 2번 줄을 보시면 n을 단독으로 입력하였을땐 n키의 press, release가 정상적으로 작동하였습니다. 이후 <ctrl _l + alt_l + n>을 입력하였는데 <ctrl _l + alt_l + 78>로 press되고 <ctrl _l + alt_l + n>으로 release된것을 볼 수 있습니다. ctrl키랑 함께 누르면 영문키가 영어가 아닌 다른 무언가로 입력되는것 같습니다. 그래서 MY_HOT_KEYS변수에서 KeyCode(char="n") 부분을 KeyCode(78)로 바꾸어주니(2, 3번 그림) 함수가 잘 호출되었네요(4번 그림)
따라서, 저처럼 ctrl키와 함께 무언가를 누를때 누른 값이 아닌 다른 값이 입력되는 분들은 코드실행해서 하나하나 입력, 반환받아보고 찾아서 넣어주어야 할것 같습니다. 제 컴퓨터에서는 왜이런지 모르겠네요 ꉂꉂ(ᵔᗜᵔ*) 근본적인 해결책이 있다면 알려주세요!
Key.xx 반환시 --> 그대로 Key.xx
<int> 반환시 --> KeyCode(int)
'str' 반환시 --> KeyCode(char = "str")
답변 1
3
어려운걸 찾아내셨습니다. 엄청 고민하셨던 흔적이 보입니다.^^;;;;
78은 n 키의 ascii 코드 값입니다. 78 == char('n') 같은 내용입니다만 왜 그렇게 동작하는지는 pynput 라이브러리의 소스 코드를 분석해봐야 알듯 합니다. [아스키코드값 링크]
사실 pynput 은 윈도우의 경우 WH_KEYBOAD_LL 라는 메세지를 후킹하는 DLL을 파이썬에서 사용하게 래핑한 라이브러리 입니다. (윈도우는 모든 동작이 메세지 형태로 일어나며 그 메세지를 가로채는걸 후킹 한다고 합니다) 그 말인 즉슨 pynput 은 파이썬과 C++로 작성된 DLL 파일과의 다리 역할만 하고 실제 키를 감지, 키를 발생시키는 애는 윈도우 자체가 하고 있는걸로 보입니다.
VS CODE 상에서
키보드를 리스닝하는 keyboard.Listener 코드 에서 Listener를 컨트롤키 + 클릭 하면 pynput 소스 코드로 진입할 수 있습니다. 그러면 거기서
위와 같은 부분이 있는데 윈도우인 경우 sys.platform == 'win32' 밑의 코드에서
from ._win32 import KeyCode, Key, Controller, Listener
여기서 Listener 를 컨트롤 + 클릭 하시면 Listener 클래스의 소스 코드를 보실 수 있습니다. 여기서.. 밑으로 스크롤을 조금 내려보시면
위의 코드가 on_press 되었을때 호출되는 부분이고 여기 하단의 self.on_press가 호출되는데 이 함수는 _base.py 파일에
위처럼 초기화 되면서 on_press 함수가 내가 작성한 on_press 함수로 연결되는 부분인걸 확인 하실 수 있습니다. (복잡합니다...)
어쨌든 다시 위의 코드를 보면
def _process(self, wparam, lparam):
이 함수의 인자로 넘어오는 wparam 은 윈도우 메세지 이름이고 lparam 값이 키보드의 키 코드 값입니다. 이런식으로 위에서 말씀드린 컨트롤 + 클릭으로 pynput 소스코드를 분석하셔서 필요한곳에 print 문 같은걸 찍어서 확인해보시는면 찾아볼 수 있지 않을까 생각됩니다. 물론 라이브러리의 소스 코드를 수정하는건 신경써서 하셔야 하고 프린트문 찍었다가 지우시고 만약 라이브러리가 꼬이면 삭제하시고 다시 설치하시면 됩니다. 도움이 되셨으면 좋겠습니다.
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
117
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
209
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
277
1





