【问题标题】:How to refresh FigureCanvasTkAgg continuously in tkinter如何在 tkinter 中连续刷新 FigureCanvasTkAgg
【发布时间】:2020-10-09 11:16:31
【问题描述】:

我正在尝试在不使用按钮的情况下使用 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():
    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()

【问题讨论】:

  • 你在after 之前调用return,这将永远不会被调用,请切换这些语句的顺序。
  • @Mike67 我交换了这两行代码的位置。图表现在会自动刷新,但是 tkinter 只显示第一个图表,之后不会更新。

标签: python tkinter


【解决方案1】:

要在计时器上重新生成绘图图像,请在函数内重新创建画布小部件并调用该函数。

试试这个代码:

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()

【讨论】:

  • 之前不知道pack_forget()这个函数,谢谢你的解决方案!
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2017-04-24
  • 2020-09-09
相关资源
最近更新 更多