7

有什么方法可以让 matplotlib 阻止代码执行挂起matplotlib.backend_bases.Event

按照这些示例,我一直在研究一些用于在 matplotlib 图形中交互式绘制线条和多边形的类。我真正想做的是阻止执行,直到我完成编辑我的多边形,然后得到顶点的最终位置——如果你熟悉 MATLAB,我基本上是在尝试复制position = wait(roihandle)语法,例如这里.

我想我可以在按键发生时设置我的交互式多边形对象的一些类属性,然后在我的脚本中反复轮询对象以查看事件是否已经发生,但我希望有更好的方法。

4

1 回答 1

7

好吧,这比我想象的要容易!对于那些感兴趣的人,我找到了使用figure.canvas.start_event_loop()and的解决方案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 回答