2016-12-28 37 views
0

我修改了一些matplotlib实例测试,这是代码Matplotlib中的Tkinter不能退出

#!/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() 

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

回答

1

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

一个解决办法可能是这样的:

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

这将关闭所有pyplot地块。但最好的事情可能不是在这种情况下使用pyplot。

+1

谢谢你,最后我删除了阴谋和使用斧 –

+0

如果你发现我的答案有用,你能接受它:) –