如何解决告诉后台进程等待 matplotlib IPython 小部件完成绘制
我想在 Jupyter 中创建一个带有开始和停止按钮的动态 matplotlib 小部件。
以下代码有效,但只是因为调度程序被告知在继续下一步之前等待一秒钟。如果这个时间减少,matplotlib 图形迟早会崩溃。有没有办法等到matplotlib完成绘制?
%matplotlib widget
import numpy as np
import random as rd
import sched,time
from ipywidgets import widgets
from IPython.display import display
from IPython.lib import backgroundjobs as bg
jobs = bg.BackgroundJobManager()
s = sched.scheduler(time.time,time.sleep)
do_run_tick_func = False
x = [0]
def tick_func(sc):
global x,ax,fig
if do_run_tick_func:
x.append(x[-1]+rd.random()-0.5)
ax.clear()
ax.plot(x)
fig.canvas.draw()
# TELL PYTHON TO WAIT UNTIL DRAW() IS DONE
s.enter(1,1,tick_func,(sc,))
button_start = widgets.Button(description="Start")
button_stop = widgets.Button(description="Stop")
def on_button_start_clicked(b):
global do_run_tick_func
do_run_tick_func = True
s.enterabs(time.time()+1,(s,))
jobs.new(s.run)
def on_button_stop_clicked(b):
global do_run_tick_func
do_run_tick_func = False
button_start.on_click(on_button_start_clicked)
button_stop.on_click(on_button_stop_clicked)
myhBox = widgets.HBox([button_start,button_stop])
fig,ax = plt.subplots()
display(myhBox)
附注:
- 以上代码改编自以下讨论:Jupyter and timer functions?
- 如果有人知道如何避免全局语句,请告诉我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。