7

保留中のコード実行をブロックするために matplotlib を取得する方法はありmatplotlib.backend_bases.Eventますか?

これらの例に従って、matplotlib の図内に線と多角形を対話的に描画するためのいくつかのクラスに取り組んできました。私が本当にやりたいことは、ポリゴンの編集が完了するまで実行をブロックし、頂点の最終的な位置を取得することです.MATLABに精通している場合は、基本的にposition = wait(roihandle)構文を複製しようとしています. .

キープレスが発生したときにインタラクティブなポリゴン オブジェクトのクラス属性を設定し、スクリプトでオブジェクトを繰り返しポーリングして、イベントがまだ発生しているかどうかを確認できると思いますが、もっと良い方法があることを望んでいました。

4

1 に答える 1

7

うーん、思ったより簡単でした!興味のある方は、 と を使用して解決策を見つけましfigure.canvas.start_event_loop()figure.canvas.stop_event_loop()

簡単な例を次に示します。

from matplotlib import pyplot as plt

class FigEventLoopDemo(object):

    def __init__(self):

        self.fig, self.ax = plt.subplots(1, 1, num='Event loop demo')
        self.clickme = self.ax.text(0.5, 0.5, 'click me',
                                    ha='center', va='center',
                                    color='r', fontsize=20, picker=10)

        # add a callback that triggers when the text is clicked
        self.cid = self.fig.canvas.mpl_connect('pick_event', self.on_pick)

        # start a blocking event loop
        print("entering a blocking loop")
        self.fig.canvas.start_event_loop(timeout=-1)

    def on_pick(self, event):

        if event.artist is self.clickme:

            # exit the blocking event loop
            self.fig.canvas.stop_event_loop()
            print("now we're unblocked")
于 2013-01-14T21:24:30.487 に答える