はじめに
matplotlibのマウスイベントを使って、図中にある四角をドラッグで任意の位置に動かす方法について説明する。
コード
解説
モジュールのインポートなど
jupyter labでインタラクティブな操作をするには、冒頭で%matplotlib widgetとする。
jupyter lnotebookの場合は%matplotlib notebookとなる。
別ウインドウで図を表示するには%matplotlibとする。
バージョン
図の作成
グラデーションの背景表示関数
この関数は下記記事で用いたものを使った。
図の表示
図は以下のようになる。図の中央にあるグレーの四角(Rectangle)を動かせるようにする。
Outputの設定
print()を表示するためのOutputをdisplay()で表示しておく。
class DraggableRectangleの作成
コンストラクタ
マウスイベントへの接続
button_press_event はクリックしたときに発生するイベントで、button_release_eventはクリックを離したときに発生するイベントで、motion_notify_eventはマウスを動かしたときに発生するイベントとなる。
クリック時の動作
self.rect.contains(event)でクリックした部分に四角があるかの判定を行う。それ以外のところをクリックしても何も起こらない。self.press = x0, y0, event.xdata, event.ydataで四角のxyとクリックした部分のデータを保持しておく。
ドラッグ時の動作
if self.press is None: returnでドラッグ時のみ有効になるようにしている。
クリックした点とドラッグした点のデータの差をとって、四角のxyにそのシフトをセットすることで四角を動かしている。
self.rect.figure.canvas.draw()することで図の再描写を行う。
リリース時の動作
マウスリリース時にクリック時に取得したデータをリセットする。
ドラッグできる図の表示
下図のようにドラッグで四角を動かすことができる。
jupyter notebookの場合
イベントの切断
dr.disconnect()でイベントを切断して、ドラッグしても動かないようにすることができる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント