如何使用 x 按钮完全关闭包含 matplotlib 图形的 tkinter 窗口?

问题描述 投票:0回答:1

我制作了一个 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。

python matplotlib tkinter
1个回答
0
投票
def on_closing():
    window.quit()  
    window.destroy()   
                      


window.protocol("WM_DELETE_WINDOW", on_closing)

不清楚为什么会发生这种情况,但是尝试在调用主循环之前调用这个函数(所以在最后,就在最后一行之前)

这个函数

window.quit()
基本上停止了主循环。
window.destroy()
确保窗口已关闭。然后将其作为 WM_DELETE_WINDOW 的协议传递

© www.soinside.com 2019 - 2024. All rights reserved.