【问题标题】:Python - Stop FuncAnimationPython - 停止 FuncAnimation
【发布时间】:2014-03-26 19:42:14
【问题描述】:

有人知道停止 FuncAnimation 的首选方法吗?我正在使用它来记录来自示波器的数据,并希望能够按需暂停和重新启动数据。有什么方法可以给它发送一个按钮点击事件吗?

谢谢,德里克

【问题讨论】:

  • 不认为该功能当前已实现。在这种情况下,你最好自己做计时器。
  • 知道了。那么您是否建议使用 TimedAnimation 函数,因为它需要一个事件源,我认为这意味着它可以停止?然后,我会在一个单独的函数中设置我自己的计时器,以按照您所说的将数据更新为图形。
  • 不,根本不要使用animation 模块(作为参考除外)。 (据我所知)没有办法“暂停”正在运行的动画。
  • 现在可以选择使用动画的事件源anim.event_source.stop() 来停止动画。请参阅this question 中的底部两个答案。

标签: python matplotlib


【解决方案1】:

可能有一些模块,但我定义了自己的暂停功能。它通过单击图形上的某个位置来冻结动画。当您再次单击时,它会继续绘制动画。

您必须在动画开始之前定义一个标志。在您的动画函数中(将在您绘制动画期间调用的函数),您必须定义一个控制块,如:if not pause:,然后编写代码以绘制下面的函数。

您可能已经检查过了,但this page 举了一个例子来说明我的意思。我想,很多人都是这样做的。

请注意,暂停的切换是通过以下函数完成的:

def onClick(event):
    global pause
    pause ^= True

在调用 FuncAnimation 之前,您必须在某处进一步添加这一行

fig.canvas.mpl_connect('button_press_event', onClick)

【讨论】:

    【解决方案2】:

    FuncAnimationTimedAnimation 的子类。它将帧作为更新函数的输入,可以是数字或生成器。它以repeat 为参数,继承自TimedAnimation,通过将reapeat 设置为False,您可以停止动画重复。

    PS:Matplotlib 文档蹩脚,错误,懒惰的写作风格,解释不清楚。有时候,我真的必须深入研究源代码才能弄清楚该怎么做。

    FuncAnimation 一样,它也将fargs 作为update 函数的额外参数,但在其文档中并没有说明fargs 的类型。事实上,我在它的源代码中找到的,fargs is used as a list

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2015-08-10
      • 2014-02-16
      • 2014-05-29
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多