Python逆引き:マウス操作のイベントを取得したい

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

pynputというライブラリを使用してマウスやキーボードの操作イベントを取得できる。

モジュールのインストール

pip install pynput

pynputを使用してマウスの移動とクリックイベントを取得する例

from pynput.mouse import Listener, Button

def on_move(x, y):
    print(f"マウスが移動しました:({x}, {y})")

def on_click(x, y, button, pressed):
    button_name = None
    if button == Button.left:
        button_name = "左クリック"
    elif button == Button.right:
        button_name = "右クリック"
    elif button == Button.middle:
        button_name = "中央クリック"
    elif button == Button.x:
        button_name = f"ボタン{button.value}"
    elif button == Button.y:
        button_name = f"ボタン{button.value}"
    
    action = "クリック" if pressed else "リリース"
    print(f"{button_name} が {action} されました:({x}, {y})")

def on_scroll(x, y, dx, dy):
    print(f"マウスがスクロールしました:({x}, {y}) ({dx}, {dy})")

# マウスのイベントリスナーを作成
with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
    listener.join()  # イベントリスナーが終了するまで待機
実行結果
マウスが移動しました:(781, 249)
マウスが移動しました:(780, 250)
マウスが移動しました:(778, 250)
マウスが移動しました:(776, 250)
右クリック が クリック されました:(776, 250)
右クリック が リリース されました:(776, 250)
マウスが移動しました:(775, 250)
マウスが移動しました:(774, 250)
マウスが移動しました:(770, 250)
マウスが移動しました:(769, 250)
マウスが移動しました:(768, 250)
マウスが移動しました:(766, 250)
マウスが移動しました:(763, 249)
左クリック が クリック されました:(763, 249)
左クリック が リリース されました:(763, 249)
中央クリック が クリック されました:(763, 249)
中央クリック が リリース されました:(763, 249)
マウスがスクロールしました:(763, 249) (0, -1)
マウスが移動しました:(763, 249)

このスクリプトでは、マウスの移動、クリック、およびスクロールイベントをリッスンし、それぞれのイベントが発生するたびにコールバック関数が呼び出される。

on_move(x, y)のxとy

マウスイベントが発生したときのマウスの座標を表している。画面の左上隅を原点としたピクセル単位の座標系で、xは水平方向(左から右への座標)、yは垂直方向(上から下への座標)となっている。
複数ディスプレイで上や左に画面が続いている場合はマイナスの値も出る。

ブロックされない形で書きたい

ゲームを作るときのマウスイベントを処理するのとかに使えそう。
ただその場合は処理がブロックされない形にする必要がある。その場合はマウスのイベントリスナーを作成する部分を以下のようにすればいい。

listener = Listener(
    on_move=on_move, 
    on_click=on_click, 
    on_scroll=on_scroll)
listener.start()
タイトルとURLをコピーしました