Python逆引き:キーボード入力のイベントを取得したい

備忘録ヘッダ画像 逆引きソースコード

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")

これで別の重たい処理中にキーボードイベントを処理できる。

タイトルとURLをコピーしました