Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅在tkinter中打开绘图(无matplotlib弹出窗口)_Python_Python 2.7_Matplotlib_Tkinter - Fatal编程技术网

Python 仅在tkinter中打开绘图(无matplotlib弹出窗口)

Python 仅在tkinter中打开绘图(无matplotlib弹出窗口),python,python-2.7,matplotlib,tkinter,Python,Python 2.7,Matplotlib,Tkinter,我用下面的代码在tkinter窗口中打开matplotlib pyplot。我的问题是,matplotlib窗口中仍然会出现绘图,我不知道如何停止。我试着对每一个plt.plot进行注释,但没有帮助 import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.use('TkAgg') from numpy import arange, sin, pi from matplotlib.backend

我用下面的代码在tkinter窗口中打开matplotlib pyplot。我的问题是,matplotlib窗口中仍然会出现绘图,我不知道如何停止。我试着对每一个plt.plot进行注释,但没有帮助

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import Tkinter as Tkinter

def tester():

    class window(Tkinter.Tk):
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()

        def initialize(self):
            self.grid()
            self.grid_rowconfigure(0,minsize=50)
            self.grid_rowconfigure(1,minsize=5)
            self.grid_rowconfigure(2,minsize=500)
            self.grid_rowconfigure(3,minsize=5)
            self.grid_rowconfigure(4,minsize=20)

            self.grid_columnconfigure(0,minsize=5)
            self.grid_columnconfigure(1,minsize=800)
            self.grid_columnconfigure(2,minsize=5)

            framer = Tkinter.Frame(self, borderwidth=2, relief='groove',bg='white')
            framer.grid(column=0,row=1,columnspan=3,rowspan=3, sticky='NSEW')
            Button1 = Tkinter.Button(bg='red',text="Click Me",command=self.onbutton1)
            Button1.grid(column=1,row=0,sticky='NSEW')


        def onbutton1(self):
            array = np.array([[1,2,3,2,1],[2,3,4,3,2],[3,4,5,4,3],[4,5,6,5,4],[3,4,5,4,3]])
            maximum = np.max(array)
            index_max = np.where(array == maximum)
            max_a, max_b = index_max  

            plotter=plt.figure('plot')            
            plt.contour(array, linewidths = 1, colors = 'k')
            plt.contourf(array, cmap = plt.cm.jet)
            plt.ylabel('y', fontdict = {'fontsize':16})
            plt.xlabel('x', fontdict = {'fontsize':16})
            plt.colorbar()
            plt.title('Title', fontdict = {'fontsize':20})    
            plt.plot(max_b, max_a, 'wo')
            F_canvas = FigureCanvasTkAgg(plotter, self)
            F_canvas.get_tk_widget().grid(column=1,row=2)


    if __name__ == "__main__":
        app = window(None)
        app.title('Window')
        app.mainloop()

tester()

谁能成为我的英雄

如果您想自己管理所有窗口,则不应使用pyplot。例如,当您执行plt.figure时,它正在创建matplotlib管理的figure窗口

甚至不要导入pyplot。具体如何调整代码取决于您使用的matplotlib功能,但是,例如,要创建图形,您需要执行以下操作:

from matplotlib import figure
plotter = figure.Figure()
通过访问该图形的轴对象并使用其方法(例如,如果有轴
ax
,则可以校准
ax.contour
),可以访问大多数打印类型(例如
contour


有关如何在Tkinter应用程序中嵌入matplotlib的简单演示,请参阅。

您可以对数字进行编号,即plt.figure(1),然后对其进行操作。在使用plt.show(1)之前,它们不应该出现。如果您不“显示”matplotlib窗口,这可能会抑制该窗口。@JKelly我在上面的代码中根本没有使用plt.show()。我是不是在用另一种方式“展示”它们?我是说,给它们编号可以“保存”它们,直到它们的号码被调用,但是布伦巴恩下面的建议可能更好。谢谢你的回复。我是这方面的初学者。。。制作Axis ax的语法是什么?@JohnCrow:我想你可以做
ax=plotter.gca()
来获得图形的轴。