tkinter里面的pyplot打开额外的数字,里面没有阴谋

时间:2015-01-09 01:25:57

标签: python matplotlib

大家好,祝新年快乐。 我的代码需要一些帮助。 我已经在tkinter中嵌入了pyplot但是每次调用该函数时,它都会打开并且新的空数字1,图2等等。我现在必须关闭这些数字,但是当我的脚本运行时,每次我需要更新绘图时,它会打开新的空数字和时间,没有任何理由。到目前为止这是我的代码。在此先感谢您的任何帮助

def plot_tour(self, tour_tuples):
    """
        We call this passing the list of tuples with city
        coordinates to plot the tour we want on the GUI
    """
    data_in_array = np.array(tour_tuples)
    transposed = data_in_array.T
    x, y = transposed
    self.f, self.a = plt.subplots(1, 1)
    self.f = Figure(figsize=(8, 6), dpi=100)
    self.a = self.f.add_subplot(111)
    self.a.plot(x, y, 'ro')
    self.a.plot(x, y, 'b-')
    self.a.set_title('Current best tour')
    self.a.set_xlabel('X axis coordinates')
    self.a.set_ylabel('Y axis coordinates')
    self.a.grid(True)
    self.canvas = FigureCanvasTkAgg(self.f, master=root)
    self.canvas.mpl_connect('motion_notify_event', on_move)
    self.canvas.get_tk_widget().grid(row=1, column=1, sticky=W)

    plt.close('all')

tcaswell的提议之后,额外的数字被消除了。为了更新思想,情节需要一个canvaw.draw()和一个canvas.show()。完整代码现在如下

def plot_tour(self, tour_tuples):
    """
        We call this passing the list of tuples with city
        coordinates to plot the tour we want on the GUI
    """
    data_in_array = np.array(tour_tuples)
    transposed = data_in_array.T
    x, y = transposed
    plt.ion()
    #self.f, self.a = plt.subplots(1, 1)
    self.f = Figure(figsize=(8, 6), dpi=100)
    self.a = self.f.add_subplot(111, navigate=True)
    self.a.plot(x, y, 'ro')
    self.a.plot(x, y, 'b-')
    self.a.set_title('Current best tour')
    self.a.set_xlabel('X axis coordinates')
    self.a.set_ylabel('Y axis coordinates')
    self.a.grid(True)
    self.canvas = FigureCanvasTkAgg(self.f, master=root)
    self.canvas.mpl_connect('motion_notify_event', on_move)
    self.canvas.get_tk_widget().grid(row=1, column=1, sticky=W)
    self.canvas.draw()
    self.canvas.show()

1 个答案:

答案 0 :(得分:2)

只需删除

行即可
self.f, self.a = plt.subplots(1, 1)

它应该正常工作。当您使用OO界面将mpl嵌入到更大的应用程序中时,您甚至不需要导入 pyplot。

这些examples也可能非常有用。