Python matplotlib tkinter - 按钮不更新图表
Python matplotlib tkinter - button doesn't update graph
我正在写一个小程序,目的是在整个过程中定期更新 matplotlib 图。为此,我打算使用 clear() 并重新绘制图形。当从创建图形的方法中调用时,clear 函数确实起作用,但当从按钮调用时它不起作用,即使图形是作为参数给出的。
下面是用于说明问题的最基本形式的可运行代码。
在这种情况下,单击 "Update" 按钮不会执行任何操作。我该如何修复该按钮以清除图表?
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
import numpy as np
class MainWindow(tk.Frame):
def __init__(self, master = None):
tk.Frame.__init__(self, master)
self.add_graph()
def add_graph(self):
fig_sig = plt.figure(figsize=(4,2))
graph = fig_sig.add_subplot(111)
y_values = [0,1,2,3,4,5]
x_values = [1,2,3,4,5,6]
graph.plot(x_values, y_values)
canvas = FigureCanvasTkAgg(fig_sig, master=root)
canvas_widget=canvas.get_tk_widget()
canvas_widget.grid(row = 1, column = 0, columnspan = 3)
canvas.draw()
self.add_widgets(root, graph)
#graph.clear() # Calling graph.clear() here does clear the graph
def add_widgets(self, parent, graph):
update_btn = tk.Button(parent, text = "Update", command = lambda: self.update_graph(graph))
update_btn.grid(row = 8, column = 3)
def update_graph(self, graph):
graph.clear() # calling graph.clear() here does nothing
root = tk.Tk()
oberflaeche = MainWindow(master = root)
oberflaeche.mainloop()
在那种情况下你需要 "update" canvas。
将您的 canvas 定义为:self.canvas = FigureCanvasTkAgg(fig_sig, master=root)
和"update"它:
def update_graph(self, graph):
graph.clear() # calling graph.clear() here does nothing
self.canvas.draw()
我正在写一个小程序,目的是在整个过程中定期更新 matplotlib 图。为此,我打算使用 clear() 并重新绘制图形。当从创建图形的方法中调用时,clear 函数确实起作用,但当从按钮调用时它不起作用,即使图形是作为参数给出的。
下面是用于说明问题的最基本形式的可运行代码。 在这种情况下,单击 "Update" 按钮不会执行任何操作。我该如何修复该按钮以清除图表?
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
import numpy as np
class MainWindow(tk.Frame):
def __init__(self, master = None):
tk.Frame.__init__(self, master)
self.add_graph()
def add_graph(self):
fig_sig = plt.figure(figsize=(4,2))
graph = fig_sig.add_subplot(111)
y_values = [0,1,2,3,4,5]
x_values = [1,2,3,4,5,6]
graph.plot(x_values, y_values)
canvas = FigureCanvasTkAgg(fig_sig, master=root)
canvas_widget=canvas.get_tk_widget()
canvas_widget.grid(row = 1, column = 0, columnspan = 3)
canvas.draw()
self.add_widgets(root, graph)
#graph.clear() # Calling graph.clear() here does clear the graph
def add_widgets(self, parent, graph):
update_btn = tk.Button(parent, text = "Update", command = lambda: self.update_graph(graph))
update_btn.grid(row = 8, column = 3)
def update_graph(self, graph):
graph.clear() # calling graph.clear() here does nothing
root = tk.Tk()
oberflaeche = MainWindow(master = root)
oberflaeche.mainloop()
在那种情况下你需要 "update" canvas。
将您的 canvas 定义为:self.canvas = FigureCanvasTkAgg(fig_sig, master=root)
和"update"它:
def update_graph(self, graph):
graph.clear() # calling graph.clear() here does nothing
self.canvas.draw()