在tkinter中叠加图形

时间:2017-11-24 09:17:17

标签: python matplotlib tkinter

我正在制作一个嵌入式matplotlib图形GUI程序。 enter image description here

当用户点击“更新”按钮时,我想在上图窗口中叠加图形。

但是,单击“更新”按钮时没有响应。

我正在使用Spyder Python 3.6版本。

以下是我写的内容。

import matplotlib.pyplot as plt 
import csv
import numpy as np
import tkinter as tk
from tkinter import ttk

import matplotlib as plt
plt.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib import style


class Analysis_app(tk.Tk):
    def __init__(self):

        tk.Tk.__init__(self)
        tk.Tk.wm_title(self, "SIM Analyser")


        right_f = tk.Frame(self)
        right_f.pack(side=tk.RIGHT)


        self.entry1 = ttk.Entry(right_f).pack()
        self.entry2 = ttk.Entry(right_f).pack()
        self.entry3 = ttk.Entry(right_f).pack()
        self.entry4 = ttk.Entry(right_f).pack()
        self.entry5 = ttk.Entry(right_f).pack()

        Button1 = ttk.Button(right_f, text='Update', command=self.plot).pack(side=tk.BOTTOM)


        self.left_f = tk.Frame(self)
        self.left_f.pack(side=tk.LEFT)

        f = Figure(figsize=(10,6), dpi=100)
        self.upplot = f.add_subplot(211)
        self.botplot = f.add_subplot(212)


        a =self.upplot
        a.clear()
        a.plot([1,2,3],[1,2,3])


        canvas = FigureCanvasTkAgg(f, self)
        canvas.show()
        canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)


        toolbar = NavigationToolbar2TkAgg(canvas, self)
        toolbar.update()
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        self.mainloop()

   def plot(self):

        a =self.upplot
        a.clear()
        a.plot([1,2,3],[5,2,5])

1 个答案:

答案 0 :(得分:2)

由于在更改绘图内容后未重绘画布,因此没有响应。

解决方案是将canvas = FigureCanvasTkAgg(f, self)替换为self.canvas = FigureCanvasTkAgg(f, self),以便您可以在self.plot中重绘画布:

def plot(self):
    a = self.upplot
    a.clear()
    a.plot([1,2,3],[5,2,5])
    self.canvas.draw_idle()

然后,您应该在点击更新按钮后看到更改。