Dash实现CSV表格定时更新失败问题求助
问题分析与解决方案
你的代码存在几个关键问题导致表格无法更新,以下是具体修正点和完整代码:
错误点说明
- 回调参数不匹配:回调函数的参数需与输入组件对应,你定义的
update_table(df)里的df并非回调输入(输入是n_intervals),这会导致参数错误。 - DataTable属性错误:
dash_table.DataTable的表格数据需通过data属性更新,而非children属性。 - 路径转义问题:Windows路径中的
\会被解析为转义字符,需用原始字符串r'路径'避免。 - 返回格式错误:回调需返回字典列表(
df.to_dict('records')),而非JSON字符串,这是DataTable要求的数据格式。 - 初始数据逻辑:初始表格数据应通过回调生成,而非在layout中硬编码,保证更新逻辑一致性。
修正后的完整代码
from dash import Dash, html, dcc, dash_table, Input, Output, callback import pandas as pd from datetime import date from threading import Timer import os import webbrowser today = str(date.today()) app = Dash(__name__) app.layout = html.Div(children=[ html.H4(children=f'PRODUCTION STATS {today}', style={'textAlign': 'left'}), dcc.Interval(id='interval-component', interval=30000, n_intervals=0), # 初始DataTable不设置data,由回调初始化 dash_table.DataTable(id='my-table') ]) @callback( Output('my-table', 'data'), Input('interval-component', 'n_intervals') ) def update_table(n_intervals): # 使用原始字符串避免路径转义 df = pd.read_csv(r'I:\LABELLING\COUNT2.csv') # 返回DataTable要求的字典列表格式 return df.to_dict('records') def open_browser(): if not os.environ.get("WERKZEUG_RUN_MAIN"): webbrowser.open_new('http://localhost:8005/') if __name__ == '__main__': Timer(1, open_browser).start() app.run_server(host='localhost', port=8005, debug=True)
额外说明
- 添加
debug=True可以在开发时自动重载代码,方便调试。 - 每次Interval触发时,回调会重新读取CSV文件并返回最新的字典列表,DataTable会自动更新显示。
内容的提问来源于stack exchange,提问作者CominUpMilhouse
相关产品推荐
相关产品推荐

