[Python]pynputでマウスのクリックイベントを取得して処理する
マウスのクリックイベントを取得して、処理をさせてみます。
pynput
というライブラリを使うと楽に実装できました。
pynput のインストール
pip install pynput
サンプルを動かしてみる
まずは公式ドキュメントのサンプルコードを書いてみます。
from pynput import mouse
def on_move(x, y):
print('Pointer moved to {0}'.format(
(x, y)))
def on_click(x, y, button, pressed):
print('{0} at {1}'.format(
'Pressed' if pressed else 'Released',
(x, y)))
if not pressed:
# Stop listener
return False
def on_scroll(x, y, dx, dy):
print('Scrolled {0} at {1}'.format(
'down' if dy < 0 else 'up',
(x, y)))
# Collect events until released
with mouse.Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll) as listener:
listener.join()
実行すると、マウスの位置情報を表示し続け、クリックすると停止します。
$ python pynput_sample.py
Pointer moved to (-299.82421875, 508.1953125)
Pointer moved to (-295.06640625, 510.5703125)
Pointer moved to (-291.7734375, 512.76171875)
...
Pressed at (-268.22265625, 399.65625)
Released at (-268.22265625, 399.65625)
具体的に処理をさせてみる
サンプルの書き方だと変数を取り扱うのが面倒だったため、クラスにしました。
仕様は以下です。
- クリックするとクリック位置を出力
- 5回クリックすると終了
from pynput import mouse
class Monitor:
def __init__(self):
self.counter = 0
self.over_count = 5
def count(self):
self.counter += 1
print('Count:{0}'.format(self.counter))
def is_over(self):
return True if self.counter >= self.over_count else False
def call(self):
self.count()
if self.is_over():
print('Done')
self.listener.stop() # 規定回数過ぎたら終了
def on_click(self, x, y, button, pressed):
print('{0} at {1}'.format(
'Pressed' if pressed else 'Released',
(x,y)))
if pressed:
self.call()
def start(self):
with mouse.Listener(
on_click=self.on_click) as self.listener:
self.listener.join()
monitor = Monitor()
monitor.start()
実行してみます。
$ python pynput_monitor.py
Pressed at (-517.97265625, 743.3515625)
Count:1
Released at (-517.97265625, 743.3515625)
Pressed at (-294.79296875, 675.2890625)
Count:2
Released at (-294.79296875, 675.2890625)
Pressed at (-158.21484375, 623.69921875)
Count:3
Released at (-158.21484375, 623.69921875)
Pressed at (-158.21484375, 623.97265625)
Count:4
Released at (-158.21484375, 623.97265625)
Pressed at (-158.21484375, 624.24609375)
Count:5
Done
$
まとめ
pynputを使って、マウスクリックを取得して処理をさせることができました。
ディスカッション
コメント一覧
まだ、コメントがありません