Python tkinter中的Matplotlib无法退出

Python tkinter中的Matplotlib无法退出,python,matplotlib,tkinter,Python,Matplotlib,Tkinter,我修改了一些matplotlib示例进行测试,这是代码 #!/usr/bin/env python import matplotlib matplotlib.use('TkAgg') from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import matplotlib.pyplot as plt import sys if sys.versi

我修改了一些matplotlib示例进行测试,这是代码

#!/usr/bin/env python
import matplotlib
matplotlib.use('TkAgg')

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

import sys
if sys.version_info[0] < 3:
    import Tkinter as Tk
else:
    import tkinter as Tk

root = Tk.Tk()
root.wm_title("test in TK")

f = plt.figure(figsize=(3,3),dpi=98)

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')

plt.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=True, startangle=90)

plt.axis('equal')

canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

button = Tk.Button(master=root, text='Quit', command=sys.exit)
button.pack(side=Tk.BOTTOM)

Tk.mainloop()
#/usr/bin/env python
导入matplotlib
matplotlib.use('TkAgg')
从matplotlib.backends.backend_tkagg导入图CAVASTKAGG
从matplotlib.figure导入图形
将matplotlib.pyplot作为plt导入
导入系统
如果系统版本信息[0]<3:
将Tkinter作为Tk导入
其他:
将tkinter作为Tk导入
root=Tk.Tk()
root.wm_标题(“TK中的测试”)
f=plt.图(figsize=(3,3),dpi=98)
标签=‘青蛙’、‘猪’、‘狗’、‘原木’
尺寸=[15,30,45,10]
颜色=['黄绿色','金色','浅天蓝色','浅珊瑚']
爆炸=(0,0.1,0,0)#只“爆炸”第二片(即“猪”)
plt.pie(尺寸,分解=分解,标签=标签,颜色=颜色,
自动扫描='%1.1f%%',阴影=真,startangle=90)
plt.轴(“相等”)
canvas=FigureCanvasTkAgg(f,master=root)
canvas.show()
canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=1)
canvas.\u tkcanvas.pack(side=Tk.TOP,fill=Tk.BOTH,expand=1)
button=Tk.button(master=root,text='Quit',command=sys.exit)
按钮组件(侧面=底部)
Tk.mainloop()

我在tk中放了一个饼图,它可以工作,如果我按“退出”按钮,程序将正常退出,如果我按tk的“X”,窗口将关闭,但CMD窗口中的这个程序总是在等待,而不是退出,我需要使用Ctrl+Break来关闭它,为什么?

pyplot库提供了一个类似MATLAB的绘图框架。通过在后台创建线程,您可以在使用CLI或其他接口的同时与pyplot用户界面进行通信,从而使您的生活更加轻松。我猜现在发生的是,当您按下quit时,这个helper线程不会终止,因此程序不会退出。在制作自己的GUI时,可能应该避免使用pyplot

一个解决办法是:

def exit():
    plt.close('all')
    sys.exit()

这将关闭所有pyplot绘图。但是最好不要在这种情况下使用pyplot。

pyplot库提供了一个类似于MATLAB的绘图框架。通过在后台创建线程,您可以在使用CLI或其他接口的同时与pyplot用户界面进行通信,从而使您的生活更加轻松。我猜现在发生的是,当您按下quit时,这个helper线程不会终止,因此程序不会退出。在制作自己的GUI时,可能应该避免使用pyplot

一个解决办法是:

def exit():
    plt.close('all')
    sys.exit()

这将关闭所有pyplot绘图。但是在这种情况下最好不要使用pyplot。

如果你觉得我的答案有用,你能接受吗:)如果你觉得我的答案有用,你能接受吗:)