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

PySimpleGUI的clear按钮无法清空canvas,matplotlib新图叠加在原有图形上

问题解决方法

核心原因是仅清空matplotlib的轴对象ax没有同步更新PySimpleGUI绑定的画布渲染,旧的渲染缓存还留在底层画布上,所以新图会直接叠加。

修正后的核心代码

# 清除所有输出
if event == '-BTNCLEAR-':
    window['-OUTPUT-'].Update('')
    window['-OUTPUT1-'].Update('')
    window['-OUTPUT2-'].Update('')
    window['-OUTPUT3-'].Update('')
    # 1. 清空matplotlib轴对象
    ax.cla()  
    # 2. 获取画布对应的figure对象重绘,刷新渲染缓存
    fig = ax.get_figure()
    fig.canvas.draw()
    fig.canvas.flush_events()
    # 3. 可选:如果每次绘图会新建figure,直接删除整个figure替换更彻底
    # plt.close(fig)
    # 4. 清空PySimpleGUI底层画布的残留内容
    window['-CANVAS-'].TKCanvas.delete("all")
window.refresh()

关键步骤说明

  • ax.cla()仅清空matplotlib逻辑层的轴内内容,不会触发底层画布的重绘,必须调用fig.canvas.draw()把清空后的状态渲染到实际画布上,清除渲染缓存
  • window['-CANVAS-'].TKCanvas.delete("all")直接清空Tk底层的画布绘制内容,避免残留旧像素
  • 如果你单独保存了绑定matplotlib和PySimpleGUI的figure_canvas_agg实例,直接调用figure_canvas_agg.draw()的重绘效率更高
  • 如果后续绘图是新建figure而非复用当前ax,直接调用plt.close('all')销毁所有旧figure,再新建绘图完全不会出现叠加问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:36:06