You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击切换股票时出现“Animation was deleted without rendering anything”报错如何解决

错误原因

  • 你在animate函数内部错误地执行了global anims + anims = []操作,每次动画帧刷新都会清空存储动画实例的列表,刚添加的动画对象没有被长期持有,被Python垃圾回收机制销毁,就触发了你看到的报错。
  • 切换股票时旧的动画实例没有停止,既占用资源也会和新动画产生冲突。
  • 原有代码还存在缩进错误:ax1.clear()、ax1.plot()写在遍历数据的for循环内,会导致每次读一行数据就清一次画布,最终仅显示最后一个数据点。

修改方案

  1. 在事件循环之外提前初始化存储动画实例的列表,不要在动画帧函数里操作这个列表的初始化
  2. 每次点击新股票加载动画前,先停止之前所有旧动画,清空动画列表
  3. 移除animate函数内清空anims的错误代码
  4. 修正画布绘制逻辑的缩进,等所有数据读取完成后再统一绘图

对应修改后的代码片段

def draw_figure(canvas, figure):
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
    return figure_canvas_agg

fig = plt.figure()
draw_figure(_VARS['window']['-Graph-'].TKCanvas, fig)

# 提前初始化动画存储列表
anims = []

#------------------------------------------------While loop/Search bar Code-----------------------------------------------------------# 

while True:
    event, values = _VARS['window'].read()
    if event in (sg.WIN_CLOSED, 'Exit'):                # always check for closed window
        break

    else:
        if values['-INPUT-'] != '':                         # if a keystroke entered in search field
            search = values['-INPUT-']
            new_values = [x for x in stockDic if search in x]  # do the filtering
            _VARS['window']['-LIST-'].update(new_values)     # display in the listbox
        else:
            # display original unfiltered list
            _VARS['window']['-LIST-'].update(stockDic)
        # if a list item is chosen
        if event == '-LIST-' and len(values['-LIST-']):
            # 新增:先停止旧动画,清空列表
            if anims:
                for old_ani in anims:
                    old_ani.event_source.stop()
                anims.clear()

            stockName = values['-LIST-']
            name = stockName[0]
            _VARS['window']['-Name-'].update("Name: {}".format(stockDic[name]["Name"]))
            _VARS['window']['-Price-'].update("Price: {}".format(stockDic[name]["Price"]))
            _VARS['window']['-Current_Gain-'].update("Current Gain: {}".format(stockDic[name]["currentGain"]))

            moment=time.strftime("%Y-%b-%d__%H",time.localtime())

            plt.clf()
            ax1 = fig.add_subplot(1,1,1)

            def animate(i):
                # 移除了这里的global anims和anims = []错误代码
                pullData = open("csv_files/{}/{}.csv {}".format(stockDic[name]["Name"], stockDic[name]["Name"], moment),"r").read()
                dataArray = pullData.split('\n')
                xar = []
                yar = []
                for eachLine in dataArray:
                    if len(eachLine)>1:
                        x,y = eachLine.split(',')
                        xar.append(int(x))
                        yar.append(int(y))
                # 修正缩进:所有数据读取完成后再清画布绘图
                ax1.clear() 
                ax1.plot(xar,yar)

            ani = animation.FuncAnimation(fig, animate, interval=150)
            anims.append(ani)

内容的提问来源于stack exchange,提问作者Kasra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:15:02