Python でキープレスを検出する

  1. Python の keyboard モジュールを使って Python でキープレスを検出する
  2. Python の pynput モジュールを使って Python でキープレスを検出する

キーボードのような入力デバイスのようなハードウェアへのアクセスが必要な場合、Python で利用可能なモジュールがあり、あなたの生活をはるかに簡単にすることができます。そのようなモジュールを使用することで、複雑なシステムを扱うことなく、自分が望むタスクを簡単に実行することができます。

この記事では、Python でモジュールを使ってキープレスを検出する方法を紹介します。Python にはキープレスを検出するために使われるモジュールがたくさんありますが、その中でも特に人気があり広く使われているのは keyboardpynput の 2つのモジュールです。

Python の keyboard モジュールを使って Python でキープレスを検出する

keyboard モジュールは、キーボードを完全に制御することを可能にし、様々な事前定義された方法から選択することができます。これらの方法により、キーボードを操作したり、キーボード上でのユーザの物理的なキー押下を検出したりするのが非常に簡単になります。

keyboard モジュールをインストールするには、コマンドプロンプトまたはターミナルから以下のコマンドを実行します。

pip3 install keyboard

まず、keyboard モジュールをプログラムにインポートする必要があります。ここでは、Python の read_key()is_pressed()on_press_key() の 3つのメソッドを使ってキープレスを検出しています。

import keyboard

while True:
    if keyboard.read_key() == "p":
        print("You pressed p")
        break

while True:
    if keyboard.is_pressed("q"):
        print("You pressed q")
        break
        
keyboard.on_press_key("r", lambda _:print("You pressed r"))

出力:

You pressed p
You pressed q
You pressed r

read_key() はユーザがキーボード上でどのキーを押したかを読み取って、それが目的のキー (この場合は p) であれば You pressed p というメッセージを出力します。関数 read_key() は文字を返します。

is_pressed() は文字を入力として受け取り、ユーザが押したキーと一致すれば True を、そうでなければ False を返します。

on_press_key() は 2つのパラメータを入力として取り、1つ目は文字、2つ目は関数です。ユーザが on_press_key() 関数の最初のパラメータで指定したキーと一致するキーを押下した場合、2 番目のパラメータで指定した関数のみが実行されます。

Python の pynput モジュールを使って Python でキープレスを検出する

pynput モジュールは、主にマウスやキーボードなどの入力デバイスを検出して制御するために使われます。しかし、このチュートリアルでは、キーボードの押下を検出するためにこのモジュールを使用する方法のみを見ていきます。このモジュールを使用する前に、以下のコマンドを使用してインストールする必要があります。

pip3 install pynput

このモジュールを利用するには、まず pynput モジュールから keyboard をインポートする必要があります。

from pynput import keyboard

def on_press(key):
    try:
        print('Alphanumeric key pressed: {0} '.format(
            key.char))
    except AttributeError:
        print('special key pressed: {0}'.format(
            key))

def on_release(key):
    print('Key released: {0}'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

出力:

Alphanumeric key pressed: a 
Key released: 'a' 
Alphanumeric key pressed: b
Key released: 'b'
special key pressed: Key.ctrl_l 
Key released: Key.ctrl_l

上記の出力は、ユーザがどのキーを押したかによって変化することに注意してください。

キープレスを検出するために、on_presson_release の 2つの関数を定義しています。関数 on_press はユーザがキーボードのボタンを押したときに実行され、ユーザがボタンを離すとすぐに on_release が実行されます。

どちらの関数も、ユーザが押したキーと離したキーをコンソールウィンドウに表示するだけです。この 2つの関数の実装は、必要に応じて変更することができます。

そして最後に、キーボードのイベントを受信するリスナーを用意し、それに応じて on_presson_release 関数を実行します。

関連記事 - Python Input

  • Python 3 の raw_input
  • Python で入力を整数として読み取る方法