HOWTO · Python
Python でキープレスを検出する
このチュートリアルでは、Python でキーボードのキープレスを検出する方法のデモを提供します。
このページの内容
キーボードのような入力デバイスのようなハードウェアへのアクセスが必要な場合、Python で利用可能なモジュールがあり、あなたの生活をはるかに簡単にすることができます。そのようなモジュールを使用することで、複雑なシステムを扱うことなく、自分が望むタスクを簡単に実行することができます。
この記事では、Python でモジュールを使ってキープレスを検出する方法を紹介します。Python にはキープレスを検出するために使われるモジュールがたくさんありますが、その中でも特に人気があり広く使われているのは keyboard と pynput の 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_press と on_release の 2つの関数を定義しています。関数 on_press はユーザがキーボードのボタンを押したときに実行され、ユーザがボタンを離すとすぐに on_release が実行されます。
どちらの関数も、ユーザが押したキーと離したキーをコンソールウィンドウに表示するだけです。この 2つの関数の実装は、必要に応じて変更することができます。
そして最後に、キーボードのイベントを受信するリスナーを用意し、それに応じて on_press と on_release 関数を実行します。