質問: ### 前提・実現したいこと Python初学者です。プログラミングは、少し昔触った程度の素人です。また、オブジェクト指向についてもなんとなくしかわかっていません マウスのクリックイベントを取得して、スクリーンショットを取りたいと思っています。 pynputライブラリを使うとできるのかと思ったのですが、そもそもサンプルコードを読み解けません。 教えていただけないでしょうか。 ### 発生している問題・エラーメッセージ 具体的な質問 1このコードの関数は、元のpynputのクラスのメソッドをオーバーライドしているのでしょうか。 2 on_clickの関数内でprint('{0} at {1}'.format( 'Pressed' if pressed else 'Released', (x, y))) と書かれていますが、formatの中でPressedがTRUEかFALSEか見て 出力しているということでしょうか。 formatの基本的な書き方しか知らずこういうこともできるのかと困惑しています。 3最後のwith mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join() ここが一番わかりません。 with構文は、ファイル入出力処理などで使用するという基本的な話は見たのですが、これはそういうことではないですよね? ごちゃごちゃな質問で申し訳ありません。よろしくお願いします。 ### 該当のソースコード ``` 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() ``` ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 1. オーバーライドしていません。まず、クラスを継承していませんし、そもそもclassの中で定義していないからです。 2. その通りです。if文を入れることで条件によって値を変えることができます。 3. イベント駆動型プログラミングで調べられるといいと思います。ここで各イベント(マウスが動いた, クリックした...)が発生した時に呼び出す関数を指定しています。 withはcloseといったメモリ解放の後処理を省略でき可読性が向上します。ファイル処理以外にも使えるということですね。