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

关闭含matplotlib图表的tkinter窗口后Python会话无法结束的解决办法

Tkinter嵌入Matplotlib后窗口关闭进程残留问题解决

问题描述

在Tkinter界面中嵌入Matplotlib图表,程序运行时功能正常,但点击窗口默认的“X”关闭按钮后,终端进程始终无法终止;手动添加的Exit按钮(调用sys.exit())可以正常结束进程,单独使用root.destroy()也无法解决问题。

使用的代码如下:

import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import sys

root = tk.Tk()

fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot()
line, = ax.plot([1,2,3],[1,4,9])

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()

toolbar = NavigationToolbar2Tk(canvas, root, pack_toolbar=False)
toolbar.update()

canvas.get_tk_widget().pack()
toolbar.pack()

tk.Button(root, text="Exit", command=lambda:sys.exit()).pack()

root.mainloop()

环境信息:

  • Windows 11 PowerShell 版本 5.1.22621.963
  • Python 3.11.1

解决方案

问题根源是Matplotlib的后台线程未随Tkinter窗口关闭而终止,需手动清理Matplotlib资源并终止进程。

修改步骤:

  1. 定义统一的关闭处理函数,在其中销毁Tkinter窗口、关闭Matplotlib图形并终止进程
  2. 将窗口的关闭事件绑定到该函数上

修改后的完整代码:

import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import sys

def on_closing():
    root.destroy()
    plt.close('all')  # 释放Matplotlib所有图形资源
    sys.exit()

root = tk.Tk()
# 绑定窗口关闭事件到自定义处理函数
root.protocol("WM_DELETE_WINDOW", on_closing)

fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot()
line, = ax.plot([1,2,3],[1,4,9])

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()

toolbar = NavigationToolbar2Tk(canvas, root, pack_toolbar=False)
toolbar.update()

canvas.get_tk_widget().pack()
toolbar.pack()

# 让Exit按钮也调用统一的关闭函数
tk.Button(root, text="Exit", command=on_closing).pack()

root.mainloop()

关键说明

  • plt.close('all'):关闭所有Matplotlib创建的图形实例,彻底释放相关的后台线程与资源
  • sys.exit():确保整个Python进程完全终止,避免残留线程导致进程挂起
  • 统一关闭逻辑:将窗口默认关闭事件和Exit按钮绑定到同一个函数,保持行为一致

内容的提问来源于stack exchange,提问作者Abel Gutiérrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:50:26