pynputライブラリを使用すると、キーボードの入力を取得できる。
モジュールのインストール
pip install pynput
pynputを使用してキーボードの入力を取得する例
from pynput.keyboard import Key, Listener
def on_press(key):
print(f'キー {key} が押されました')
def on_release(key):
print(f'キー {key} が離されました')
if key == Key.esc: # キーがescだった場合、終了する
return False
# キーボードのイベントリスナーを作成
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join() # イベントリスナーが終了するまで待機
print("finish")
実行結果
a->shift->A->1->半角/全角->Escの順に押した結果
キー 'a' が押されました
キー 'a' が離されました
キー Key.shift が押されました
キー 'A' が押されました
キー Key.shift が離されました
キー 'a' が離されました
キー '1' が押されました
キー '1' が離されました
キー <244> が離されました
キー <243> が押されました
キー Key.esc が押されました
キー Key.esc が離されました
finish
ちゃんと取れている。
なおリスナーを停止するは pynput.keyboard.Listener.stop
を呼び出し、StopException
を発生させるか、コールバックから False
を返すことで停止できる。
ゲームを作るときのキーボード入力を処理するのとかに使えそう。
ブロックしない形の記載例
他に流用するとなると処理をブロックされない形で書きたい、その場合は以下のような形にする。
from pynput.keyboard import Key, Listener
def on_press(key):
print(f'キー {key} が押されました')
def on_release(key):
print(f'キー {key} が離されました')
if key == Key.esc: # キーがescだった場合、終了する
return False
listener = Listener(
on_press=on_press,
on_release=on_release)
listener.start()
# 他の重たい処理
for i in range(10):
import time
time.sleep(1)
print("finish")
これで別の重たい処理中にキーボードイベントを処理できる。