我正在尝试使用Matplotlib作为模拟器项目的前端。模拟器应该从用户那里获取输入并相应地更新数字。实时更新maptlotlib中的数字工作正常,但除非调用<p>
,否则事件没有回调。
show()
此代码按http://matplotlib.org/users/event_handling.html
工作并输出事件不幸的是,我需要能够在更新之间进行处理,并且无法将控制交给from time import sleep
import matplotlib.pyplot as plt
plt.figure()
def onclick(event):
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
plt.gcf().canvas.mpl_connect('button_press_event', onclick)
plt.plot([0,1,2],[5,10,15])
plt.show()
。更改阻止show()
:
show()
非阻止plt.show()
不起作用:
show(block=False)
我认为这与缺少执行事件处理的主循环有关。我没有找到有关如何手动执行此操作的信息。
答案 0 :(得分:1)
根据您需要执行的作业,您可以使用Matplotlib添加动画,如下所示,这将定期重复调用函数:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def one_second(event):
global count
count += 1
print "Working %s" % count
def onclick(event):
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
count = 0
fig = plt.figure()
fig.canvas.mpl_connect('button_press_event', onclick)
plt.plot([0,1,2],[5,10,15])
ani = animation.FuncAnimation(fig, one_second, repeat=True, interval=1000)
plt.show()
然后打印出类似的内容:
Working 1
Working 2
Working 3
Working 4
Working 5
Working 6
button=1, x=317, y=181, xdata=0.932120, ydata=8.018293
Working 7
button=1, x=388, y=233, xdata=1.213141, ydata=9.603659
button=1, x=273, y=285, xdata=0.757966, ydata=11.189024
Working 8
或者,您可以使用plt.pause()
尝试以下方法:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
def onclick(event):
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
fig = plt.figure()
fig.canvas.mpl_connect('button_press_event', onclick)
plt.plot([0, 1, 2], [5, 10, 15])
plt.ion()
plt.show()
count = 0
next = 0
while plt.fignum_exists(fig.number):
print "Working %s" % count
while time.time() < next:
plt.pause(.001)
next = time.time() + 1.0
count += 1