Я пытаюсь зарегистрировать button_press_event
для функции on_click
, которая используется для продвижения кадров функции animate
, используемой matplotlib.animation.FuncAnimation
.
Проблема в том, что print
внутри on_click
никогда не бывает.Я предполагаю, что проблема в том, что цикл, используемый для остановки анимации до тех пор, пока button_press_event
не обнаружен, блокирует интерпретатор.
data = [
{'1': [(2000, 2000), (2050, 2000), (2050, 2100)],
'2': [(1500, 1500), (1550, 1500), (1550, 1600)],
'3': [(1700, 1700), (1750, 1700), (1750, 1850)],
},
{'1': [(4000, 2000), (5000, 2000), (6000, 2010)],
'2': [(4500, 1500), (4505, 1500), (3505, 1510)],
'3': [(4700, 1700), (6705, 1700), (5705, 1710)],
},
{'1': [(3300, 1000), (4080, 4000), (4000, 5010)],
'2': [(3500, 3200), (3505, 2750), (2505, 1910)],
'3': [(3700, 2600), (4705, 4100), (3705, 1310)],
}
]
plots = {k: ax.plot([],[])[0] for d in data for k in d.keys()}
progress = False
def on_click(event):
print('Event')
global progress
progress ^= True
def animate(i):
d = data[i]
while not progress:
pass
plots[k].set_data(list(zip(*v))) for k,v in d.items()]
fig.canvas.mpl_connect('button_press_event', on_click)
ani = animation.FuncAnimation(fig, animate, frames=len(data), interval=1000, repeat=False)
plt.show()