2017-04-02 20 views
2

this questionのようにツールバー/ステータスバーの情報を変更したmatplotlibプロットがあります。これはうまく動作し、必要な情報が必要に応じて表示されます。matplotlibのツールバー/ステータスバー情報への更新を強制します

しかし、私はしばしば、キャンバスオブジェクトのdraw()を呼び出すことによって行われるプロットを新しいデータで更新する必要があります。ただし、ツールバー/ステータスバーの情報は、マウスが再び移動されるまで更新されません。この情報の一部は新しいプロットに関係しているため、キャンバスが再描画されるとすぐにこの情報を更新したいと思います。

これを実行しようとする私の試みは、マウスモーションイベントを強制的にトリガーすることでした。私はself.canvas.motion_notify_event(0,0)経由でキャンバスからイベントをトリガーしようとしましたが、うまくいかないようです。ツールバー自体にmouse_moveメソッドがあることがわかりますが、トリガーする方法がわかりません(またはトリガーしたい場合でも)。

ユーザーがマウスをわずかに動かさなくても、プロットの再描画中にツールバー/ステータスバーの情報を更新するにはどうすればよいですか?

答えて

0

多くの掘り出しがありました。 motion_notify_eventメソッドが私が探していたものでした。私はそれを間違って使用していました。 matplotlibを偽装し、この関数を使用してMouseEventをトリガーすると、ツールバー/ステータスバー情報の更新を含む、MouseEventsに応答するすべての関数がmatplotlibによって呼び出されます。

ここで重要なのは、図形全体ではなくAxesオブジェクト内で発生したかのようにMouseEventをトリガする必要があることです。関数への入力は、Figureウィンドウの左下隅に対するイベントの(x、y)ピクセル位置です。私の質問にしたように(0,0)を使用することで、マウスイベントが軸自体ではなく、Figureウィンドウの左下隅で発生したと言っていました。カーソルが軸上になければ、Matplotlibはツールバー/ステータスバー情報を表示しません。

あなたができることは、軸上のランダムなピクセル位置を選んで、それを位置として使用することです。このようなピクセル位置を選択する簡単な方法は、matplotlib transformationsを使用しています。今、次の

が私の作品:

私の場合はもちろん
canvas.motion_notify_event(*ax.transAxes.transform([0,0])) 

私は、マウスのデータ座標を表示していないよので、あなたのユースケースは異なる場合があります。

関連する問題