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
相关产品推荐
相关产品推荐

