Python 如何在tkinter中连续刷新FigureCastKagg
我正在尝试使用FigureCanvasTkAgg连续自动更新tkinter中的图表,而不使用按钮 这是我到目前为止写的代码Python 如何在tkinter中连续刷新FigureCastKagg,python,tkinter,Python,Tkinter,我正在尝试使用FigureCanvasTkAgg连续自动更新tkinter中的图表,而不使用按钮 这是我到目前为止写的代码 import random import tkinter as tk import seaborn as sb import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg root = tk.Tk() def cplot(): xC
import random
import tkinter as tk
import seaborn as sb
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = tk.Tk()
def cplot():
xCord = [random.randint(0,10) for i in range(5)]
yCord = [random.randint(0,10) for i in range(5)]
#defining heatmap dimensions
fig, ax = plt.subplots()
#ploting heat map with x and y coordinates
sb.kdeplot(xCord, yCord, shade = True, cmap = "Reds")
ax.invert_yaxis()
plt.axis("off")
plt.show()
root.after(1, cplot)
return fig
fig = cplot()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.after(1, cplot)
root.mainloop()
要在计时器上重新生成绘图图像,请在函数内重新创建画布小部件并调用函数 请尝试以下代码:
import random
import tkinter as tk
import seaborn as sb
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = tk.Tk()
canvas = None
def cplot():
global canvas
xCord = [random.randint(0,10) for i in range(5)]
yCord = [random.randint(0,10) for i in range(5)]
#defining heatmap dimensions
fig, ax = plt.subplots()
#ploting heat map with x and y coordinates
sb.kdeplot(xCord, yCord, shade = True, cmap = "Reds")
ax.invert_yaxis()
plt.axis("off")
if canvas: canvas.get_tk_widget().pack_forget() # remove previous image
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.after(100, cplot)
root.after(1, cplot)
root.mainloop()
要在计时器上重新生成绘图图像,请在函数内重新创建画布小部件并调用函数 请尝试以下代码:
import random
import tkinter as tk
import seaborn as sb
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = tk.Tk()
canvas = None
def cplot():
global canvas
xCord = [random.randint(0,10) for i in range(5)]
yCord = [random.randint(0,10) for i in range(5)]
#defining heatmap dimensions
fig, ax = plt.subplots()
#ploting heat map with x and y coordinates
sb.kdeplot(xCord, yCord, shade = True, cmap = "Reds")
ax.invert_yaxis()
plt.axis("off")
if canvas: canvas.get_tk_widget().pack_forget() # remove previous image
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.after(100, cplot)
root.after(1, cplot)
root.mainloop()
您正在调用
return
之前之后这将永远不会被调用,请切换这些语句的顺序。@Mike67我交换了这两行代码的位置。图表现在会自动刷新,但是tkinter只显示第一个图表,之后不会更新。如果您在将永远不会调用的之后调用之前的返回,请切换这些语句的顺序。@Mike67我交换了这两行代码的位置。图表现在会自动刷新,但是tkinter只显示第一张图表,之后不会更新。我以前不知道pack\u forget()
函数,谢谢您的解决方案!我以前不知道pack\u forget()
函数,谢谢你的解决方案!