使用button_press_event

时间:2018-10-23 18:29:29

标签: matplotlib events

我正在尝试将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()

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解您为什么要使用动画。 这是您要达到的目标吗?

 Number1 | Qty1  | Number2 | Qty2  | Number3 | Qty3 
 --------+-------|---------|-------|---------|------
  100001 | 100   | 100002  | 110   | 100003  | 120
  100004 | 130   | 100005  | 200   | 100006  | 300
  100007 | 400   |  null   | null  |  null   | null