tkinter中带有matplotlib图的弹出窗口

时间:2019-03-06 14:21:47

标签: python matplotlib tkinter

当我在tkinter窗口中插入matplotlib图形时,当我启动程序时,会出现额外的弹出窗口。它们不会影响我的GUI的功能,但是有点烦人。

我写了一个显示问题的基本脚本。我通过Spyder运行此程序:

import tkinter as tk
import matplotlib
matplotlib.use("TkAgg")

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.pyplot import figure as Figure
from matplotlib import pyplot as plt

class MyGUI(tk.Tk):
    def __init__(self,master):
        self.f=Figure(figsize=(5,5),dpi=100)
        self.fig, self.ax= plt.subplots()

        self.canvas = FigureCanvasTkAgg(self.fig,master)


        self.toolbar=NavigationToolbar2Tk(self.canvas,master)
        #self.toolbar.update()
        self.canvas._tkcanvas.pack(padx=20, pady=20)

root =tk.Tk()
window=MyGUI(root)
root.mainloop()

运行此命令时,我会看到三个窗口。一个是显示空图和工具栏(标记为“ tk”)的根窗口。这是我想要的唯一窗口。然后我得到一个带有工具栏的“图1”窗口和一个带有图形和工具栏的“图2”窗口。 My output when I run the demo code

通过注释掉init方法的后半部分,看来问题出在这部分。

self.f=Figure(figsize=(5,5),dpi=100)
self.fig, self.ax= plt.subplots()

self.canvas = FigureCanvasTkAgg(self.fig,master)

但是,我对面向对象的编程和tkinter还是很陌生,因此没有足够的经验来弄清楚错误是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您正在创建两个图形。其中之一是通过pyplot创建的。不应尝试将pyplot图形嵌入到自定义GUI中。完全删除pyplot并仅创建一个图形。

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

class MyGUI(tk.Tk):
    def __init__(self,master):
        self.fig=Figure(figsize=(5,5),dpi=100)
        self.ax = self.fig.add_subplot(111)

        self.canvas = FigureCanvasTkAgg(self.fig,master)

        self.toolbar=NavigationToolbar2Tk(self.canvas,master)
        #self.toolbar.update()
        self.canvas._tkcanvas.pack(padx=20, pady=20)

root =tk.Tk()
window=MyGUI(root)
root.mainloop()