【问题标题】:Overlay graph in tkintertkinter 中的叠加图
【发布时间】:2017-11-24 18:48:35
【问题描述】:

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

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

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

我使用的是 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])

【问题讨论】:

  • 顺便说一句:Button1 = Button(...).pack() 将 None 分配给 Button1 因为pack() 返回None,而不是小部件。如果你以后不需要访问按钮,那么你可以不用Button1 -> Button(...).pack()
  • 好的。我修改了。谢谢~! :)
  • 顺便说一句:因为您使用 Python3,所以您可以使用 super().__init__() 而不是 tk.Tk.__init__(self)。因为Analysis_app继承自tk.Tk所以你可以使用self.wm_title("SIM Analyser")而不是tk.Tk.wm_title(self, "SIM Analyser")

标签: python matplotlib tkinter


【解决方案1】:

您没有得到任何响应,因为在更改绘图内容后未重绘画布。

解决方法是将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()

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

【讨论】:

  • 使用draw_idle()draw() 更友好。
  • @ImportanceOfBeingErnest 感谢您提供的信息,我不知道draw_idle() 的存在。我已经编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2020-04-07
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多