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 listener9 return False10 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 listener21 return False22 23 24# Collect events until released25with Listener(on_press=on_press) as listener:26 listener.join()27
上記のプログラムを実行すると右シフトは問題なく検知されますが"s"キーに対しては反応がないです。また、テンキーに対してもまるで反応がないです。
上記でコメントアウトしている、
if key.char == "<98>": print("テンキー 2 pressed")
を有効にすると、sキーを押すとsが押されたと反応するのですが、右シフトキーなどを押すとエラーでコードが止まります。key.charとしたときにkeyに普通の文字のキー以外が入ってるとエラーが出るようです。
どうしたら、pynputでテンキーや普通のキーなど様々な押されたキーを判別して動作させることが出来るでしょうか?
(EnterやBSやSpaceやshiftキーなどの特殊なキーは問題なく動くのですが……)
0 コメント