是因为matplotlib默认会创建一个独立的窗口来显示图形,而tkinter也会创建一个窗口来显示应用程序的界面。因此,当将matplotlib绘制的图形嵌入到tkinter的canvas中时,会同时打开两个窗口。
要解决这个问题,可以通过使用matplotlib的FigureCanvasTkAgg类来将图形嵌入到tkinter的canvas中,而不是使用默认的窗口显示图形。下面是一个示例代码:
import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# 创建tkinter窗口
root = tk.Tk()
# 创建matplotlib的Figure对象
fig = Figure()
# 在Figure对象上创建子图
ax = fig.add_subplot(111)
ax.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
# 创建FigureCanvasTkAgg对象,将Figure对象嵌入到tkinter的canvas中
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
# 在tkinter窗口中放置canvas
canvas.get_tk_widget().pack()
# 运行tkinter主循环
root.mainloop()
在这个示例代码中,我们首先创建了一个tkinter窗口,然后创建了一个matplotlib的Figure对象,并在其上创建了一个子图。接下来,我们使用FigureCanvasTkAgg类将Figure对象嵌入到tkinter的canvas中,并将canvas放置在tkinter窗口中。最后,通过运行tkinter的主循环来显示窗口和图形。
这样,就可以实现将matplotlib嵌入到tkinter的canvas中,而不会打开额外的窗口。
领取专属 10元无门槛券
手把手带您无忧上云