gpt4 book ai didi

python - 单击破折号中的按钮后从数据框中填充破折号表

转载 作者:行者123 更新时间:2023-12-05 04:58:56 30 4
gpt4 key购买 nike

我已经开始查看 dash/plotly,但无法弄清楚我做错了什么。我想通过回调用 dash_table 更新一个 div。数据来自 Pandas 数据框/数据库查询

我试图将代码缩减到最少

import dash
import dash_table
import dash_core_components as dcc
import dash_html_components as html
import dash_bootstrap_components as dbc
from dash.dependencies import Output, Input, State

import datetime
import re
import pandas as pd

import plotly.graph_objects as go

app = dash.Dash()

app.layout = html.Div(children=[html.Div("Dashboard",
style={"color": "white", "text-align": "center", "background-color": "blue", "display": "inline-block", "width": "100%", "font-size": "46px",
}),
dcc.Tabs([
dcc.Tab(label='Upcoming events',
children=[
html.Div("Select a period: ",
style={"text-align": "center"}),
html.Div(
dcc.DatePickerRange(
id="calendar_period",
start_date_placeholder_text="Start Period",
end_date_placeholder_text="End Period",
start_date=datetime.datetime.today(),
end_date=datetime.datetime.today(),),
style={"text-align": "center"}
),
html.Div(
html.Button("Retrieve calendar", id="submit_period", n_clicks=0),
style={"text-align": "center"}
),
html.H1(id='calendar_table'),
]),
dcc.Tab(label='Some other tab',)
])
])


@app.callback(
[Output('calendar_table', 'children')],
[Input('calendar_period', 'start_date'), Input('calendar_period', 'end_date')],
[State('submit_period', 'n_clicks')])

def retrieve_calendar(start_date, end_date, n_clicks):
events = pd.read_sql_query(...) #<- query based on start_date and end_date both in date format
columns = [{"name": i, "id": i, } for i in events.columns]
df_data = events.to_dict('rows')


return dash_table.DataTable(data=df_data, columns=columns)


if __name__ == '__main__':
app.run_server(debug=True)

当运行文件并转到 127.0.0.1:8050 时,我有日期范围选择器并且可以选择日期。我确实在 python 中检索了正确的日期。但是当我点击按钮时,什么也没有发生。我用不同的开始/结束日期做了一些试验,数据库查询在几秒钟内返回了一个数据帧。我也试过

Input('submit_period', 'n_clicks')

但也没有弹出任何内容。

编辑:我收到以下错误消息:

回调 ..calendar_table.children.. 是一个多输出。

有点困惑,因为我的回调只定义了一个输出:

Output('calendar_table', 'children')

我还补充说:

def retrieve_earnings(start_date, end_date, n_clicks):
events = pd...

print(events.head())
columns = [{"name": i, "id": i, } for i in events.columns]
print(columns)
df_data = events.to_dict('records')
print(df_data)

return dash_table.DataTable(data=df_data, columns=columns)

我得到了两次

Empty DataFrame

在启动编程后大约 5 秒后(减去选择日期范围的时间),print(events.head()) 在 Python 控制台中显示正确的数据,但仍然有相同的多输出错误和127.0.0.1 上没有显示数据表

Edit2:我将 State 切换为 submit_period 按钮的 Input 并返回 [dash_table.DataTable(...)],这似乎起到了“把戏”的作用,但在这种情况下提交按钮是无用的...

最佳答案

您的回调将输出定义为长度为 1 的列表。Dash 认为这是一个多输出回调。删除方括号 ([, ]) 并为其提供 Output()。这应该可以解决您的错误。

关于python - 单击破折号中的按钮后从数据框中填充破折号表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63761064/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com