在Tkinter的Toplevel中对Matplotlib图形进行动画处理

时间:2019-06-07 19:01:26

标签: python matplotlib tkinter

我是tkinter的新手,所以如果有什么错,很抱歉。那就是...

我正在使用python 3。

标题很不言自明。我正在尝试在我的应用程序的tk.Toplevel中对图形进行动画处理。我已删除所有剩余的代码以简化问题。即使我将animation.FuncAnimation放在root.mainloop()之前,此代码也无法使用。

这是我的代码:

import tkinter as tk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.animation as animation

def running():
    #Animate the graph
    def animate(i):
        global df1
        df1 = pd.concat([df1,pd.DataFrame({'Country':[None],'GDP_Per_Capita':[df1['GDP_Per_Capita'].iloc[-1]+10]})],sort=False)
        ax1.clear()
        ax1.hist(df1['GDP_Per_Capita'], len(df1), density=1, histtype='step',
                               cumulative=True, label='Empirical')
    global df1
    t = tk.Toplevel()
    t.wm_title("Running")
    figure1 = plt.Figure(figsize=(6,5), dpi=100)
    ax1 = figure1.add_subplot(111)
    bar1 = FigureCanvasTkAgg(figure1, t)
    bar1.get_tk_widget().grid(column=0,row=0,columnspan=2)
    n, bins, patches = ax1.hist(df1['GDP_Per_Capita'], 5, density=1, histtype='step',
                  cumulative=True, label='Empirical')
    ax1.set_title('Country Vs. GDP Per Capita')
    ani = animation.FuncAnimation(figure1, animate, interval=1000)


if __name__ == "__main__":
    root = tk.Tk()
    root.title("Testing")
    #Sample Data
    Data1 = {'Country': ['US','CA','GER','UK','FR'],
            'GDP_Per_Capita': [10,15,25,45,50]
           }
    df1 = pd.DataFrame(Data1, columns= ['Country', 'GDP_Per_Capita'])
    df1 = df1[['Country', 'GDP_Per_Capita']].groupby('Country').sum()
    tk.Button(root,
              text='START', command=running, width=9, height=2, activebackground="white", bg="#006d88",bd=4).grid(row=0, column=1, sticky="E",padx=(0,10))

    root.mainloop()

这个问题与此Python Tkinter Animation不同,因为我正在Toplevel内部运行动画。如果我以root用户身份运行,它将可以正常工作。

0 个答案:

没有答案