当 tkinter window 关闭时,python 程序没有结束

The python program is not ending when tkinter window is closed

我正在从事一个使示波器像 GUI 一样的项目。虽然 GUI 还没有准备好,但我遇到了一个问题,即当我关闭 TKinter window 时程序没有关闭。 pythonshell中还是运行。我认为这可能是关闭 tkinter 相关程序的方法。但是我发现了一些程序,只要关闭 tkinter window 它就会杀死程序。在我的例子中,程序是 运行 in python shell 即使在关闭 tkinter window 之后也是如此。我把我的代码放在这里请看看问题出在哪里?

from tkinter import *
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

root = Tk()
root.geometry("800x500+100+100")
root.title('root window')

frame = Frame(root, borderwidth=1,bg="#0DBDAB") ## This is the frame in which plot will be shown
frame.place(relx=1.0/3,rely=0.5, anchor="center", relwidth=0.60,relheight=0.8)
xar = [0]
yar = [0]
k=0.2  ### This is just a constant to make plot smoother
style.use('ggplot')
fig = plt.figure(figsize=(20,20), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_ylim(-1, 1)
line, = ax1.plot(xar, yar, 'r')

## It will not plot regularly instead add line for new data
def animate(i):
    ax1.set_xlim(left=max(0,i-20), right=i+1)
    yar.append(np.sin(i*k))
    xar.append(i)
    line.set_data(xar,yar)
    return line,

plotcanvas = FigureCanvasTkAgg(fig, frame)
plotcanvas.get_tk_widget().pack(side=BOTTOM,fill=BOTH,expand=True)
ani = animation.FuncAnimation(fig, animate, interval=1000, blit=False)

root.mainloop()

我做了一个小改动,反正你一定要用这个

root.protocol("WM_DELETE_WINDOW", quit_me)

见下文,在我的 debian 上,从终端启动脚本并关闭 tkinter window 它有效。

from tkinter import *
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def quit_me():
    print('quit')
    root.quit()
    root.destroy()

root = Tk() 
root.protocol("WM_DELETE_WINDOW", quit_me)
root.geometry("800x500+100+100")
root.title('root window')