当我在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”窗口。
通过注释掉init方法的后半部分,看来问题出在这部分。
self.f=Figure(figsize=(5,5),dpi=100)
self.fig, self.ax= plt.subplots()
self.canvas = FigureCanvasTkAgg(self.fig,master)
但是,我对面向对象的编程和tkinter还是很陌生,因此没有足够的经验来弄清楚错误是什么。有什么想法吗?
答案 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()