pynputを使ってキー入力を確認するプログラムが以下です。
python
1from pynput.keyboard import Key, Listener 2 3def on_press(key): 4 print('{0} pressed'.format( 5 key)) 6 7 if key == Key.esc: 8 # Stop listener 9 return False 10 11with Listener( 12 on_press=on_press) as listener: 13 listener.join()
このサンプルでは通常のアルファベットキーを押せばそのアルファベットが表示され、右シフトキーなら Key.shift_r、スペースキーならKey.spaceが押されたと表示されます。また、テンキーの2を押すと「<98>」が押されたと表示されます。
ここで、押されたキーに応じて何か動作させたいのですが、
python
1from pynput.keyboard import Key, Listener 2 3def on_press(key): 4 print('{0} pressed'.format( 5 key)) 6 7 if key == "s": 8 print("s key pressed") 9 10# if key.char == "s": 11# print("s key pressed by asc") 12 13 if key == "<98>": 14 print("テンキー 2 pressed") 15 16 if key == Key.shift_r: 17 print("Right shift pressed") 18 19 if key == Key.esc: 20 # Stop listener 21 return False 22 23 24# Collect events until released 25with Listener(on_press=on_press) as listener: 26 listener.join() 27
上記のプログラムを実行すると右シフトは問題なく検知されますが"s"キーに対しては反応がないです。また、テンキーに対してもまるで反応がないです。
上記でコメントアウトしている、
if key.char == "s": print("s key pressed by asc")
を有効にした以下のプログラムでは
python
1from pynput.keyboard import Key, Listener 2 3def on_press(key): 4 print('{0} pressed'.format( 5 key)) 6 7 if key == "s": 8 print("s key pressed") 9 10 if key.char == "s": 11 print("s key pressed by asc") 12 13 if key == "<98>": 14 print("テンキー 2 pressed") 15 16 if key == Key.shift_r: 17 print("Right shift pressed") 18 19 if key == Key.esc: 20 # Stop listener 21 return False 22 23 24# Collect events until released 25with Listener(on_press=on_press) as listener: 26 listener.join() 27
と、sキーを押すとsが押されたと反応するのですが、右シフトキーなどを押すとエラーでコードが止まります。key.charとしたときにkeyに普通の文字のキー以外が入ってるとエラーが出るようです。
どうしたら、pynputでテンキーや普通のキーなど様々な押されたキーを判別して動作させることが出来るでしょうか?
(EnterやBSやSpaceやshiftキーなどの特殊なキーは問題なく動くのですが……)
回答1件
あなたの回答
tips
プレビュー