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

Sahil Bhosale 2022年12月21日 2021年3月5日 Python Python Input
  1. Python の keyboard モジュールを使って Python でキープレスを検出する
  2. Python の pynput モジュールを使って Python でキープレスを検出する
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 関数を実行します。

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

関連記事 - Python Input

  • Python で入力を整数として読み取る方法
  • Python でキーボード入力をシミュレートする
  • Python で複数行を入力する
  • Python 3 の raw_input
  • Python で入力検証を実行する