我制作了一个 python 程序,它创建一个带有多个选项卡的 tkinter 窗口。每个选项卡显示不同的 matplotlib 图形。
我的问题是,当我按右上角的x按钮关闭窗口时,窗口似乎关闭了,但我无法在终端中输入新命令,表明程序仍在运行。我必须关闭终端才能完全停止该程序。我该如何解决这个问题?
这是我的代码的简短版本:
import numpy as np
import h5py as h5
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import tkinter as tk
from tkinter import ttk
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
window = tk.Tk()
window.title("Plotting data in the hdf5 file")
mytabs = ttk.Notebook(window)
tab1 = ttk.Frame(mytabs)
tab2 = ttk.Frame(mytabs)
tab3 = ttk.Frame(mytabs)
tab4 = ttk.Frame(mytabs)
mytabs.add(tab1, text = "Velocity")
mytabs.add(tab2, text = "Momentum Flux")
mytabs.add(tab3, text = "Pressure and forcing")
mytabs.add(tab4, text = "Diagram")
mytabs.pack(expand = 1, fill ="both")
## code to read some data here
## code to make 4 different figures here
## fig, ax = plt.subplots(2,2, figsize = (12,12))
## ... etc.
def plot(fig,tab):
canvas = FigureCanvasTkAgg(fig, master = tab)
canvas.draw()
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(canvas, tab)
toolbar.update()
canvas.get_tk_widget().pack()
plot(fig,tab1)
plot(fig2,tab2)
plot(fig3,tab3)
plot(fig4,tab4)
window.mainloop()
如果重要的话,我使用的是 Ubuntu 22.04.4 LTS。
def on_closing():
window.quit()
window.destroy()
window.protocol("WM_DELETE_WINDOW", on_closing)
不清楚为什么会发生这种情况,但是尝试在调用主循环之前调用这个函数(所以在最后,就在最后一行之前)
这个函数
window.quit()
基本上停止了主循环。
window.destroy()
确保窗口已关闭。然后将其作为 WM_DELETE_WINDOW 的协议传递