You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何等待用户关闭当前matplotlib figure后再打开下一个

解决方案

问题根源

  • plt.waitforbuttonpress()的触发条件为任意鼠标点击、键盘按键,你在图表上进行点击交互时会直接结束当前轮阻塞,进入下一轮循环生成新图,这是不符合需求的核心原因
  • 原有代码没有正确利用plt.show()的阻塞特性

修改代码

for i in range(0, mvmt_array.shape[0], BINS_IN_HOUR):
    mvmt_day = mvmt_array[i:i+BINS_IN_HOUR]
    
    fig, ax = plt.subplots()
    ax = sns.heatmap(mvmt_day.T)
    ax.invert_yaxis()
    
    # 绑定点击事件,添加ax=ax避免闭包陷阱,保证每轮绑定的是当前ax对象
    fig.canvas.mpl_connect(
    'button_press_event', lambda event, ax=ax: onclick(event, ax))
    
    # 移除plt.waitforbuttonpress(),使用阻塞模式的show,仅关闭窗口时才结束阻塞
    plt.show(block=True)

说明

plt.show(block=True)会让代码一直保持阻塞状态,只有当你手动关闭当前弹出的图表窗口时,才会结束阻塞进入下一轮循环,窗口打开期间的所有点击交互操作都可以正常触发,不会影响阻塞状态。
如果你是在Jupyter Notebook环境中运行代码,需要先执行魔法命令%matplotlib qt切换到独立窗口渲染模式,否则内嵌图表不支持上述阻塞逻辑。

内容的提问来源于stack exchange,提问作者Ossz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:15:01