python-3.x 防止在tkinter中使用matplotlib中的子图时mainloop()继续运行

mctunoxg  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(110)

我正在使用matplot lib的subplot在一些函数中绘制图形。但它保持我的窗口窗体关闭,并保持主循环运行,正如我在图像中所示。
这是我的代码

import tkinter as tk
from tkinter import *
import matplotlib.pyplot as plt

my_w = tk.Tk()

fig, (fig1,fig2,fig3,fig4) = plt.subplots(4, figsize=(16,14)) 

my_w.mainloop()

当我删除这条线

fig, (fig1,fig2,fig3,fig4) = plt.subplots(4, figsize=(16,14))

然后关上Windows,然后它就工作了。那么,如何防止这种情况。

在这里,我运行graph.py和windows显示,现在当我关闭窗口,仍然是命令提示显示它正在运行,并阻止我退出。

uqzxnwby

uqzxnwby1#

有两种方法可以解决此问题:
1.使用“Agg”作为默认后端

import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use("Agg")

my_w = tk.Tk()

fig, (fig1,fig2,fig3,fig4) = plt.subplots(4, figsize=(16,14))

my_w.mainloop()

1.使用matplotlib.figure.Figure代替

import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

my_w = tk.Tk()

fig = Figure(figsize=(16,14))
ax1, ax2, ax3, ax4 = fig.subplots(4)

# create a canvas for the figure
canvas = FigureCanvasTkAgg(fig, master=my_w)
# draw the plots
canvas.draw()
# show the plots
canvas.get_tk_widget().pack()

my_w.mainloop()

相关问题