Python 从回调函数呈现Datatable-破折号
我正在创建一个包含多个选项卡的仪表板,每个选项卡都会触发和.py文件,该文件呈现plotly对象的不同元素 例如,我的回调函数返回绘图、图表,我希望返回Datatable 我可以使用go.Table渲染pandas dataframe,如示例所示,但不能使用DataTable,因为DataTable较新,提供了增强的用户体验Python 从回调函数呈现Datatable-破折号,python,pandas,plotly,plotly-dash,Python,Pandas,Plotly,Plotly Dash,我正在创建一个包含多个选项卡的仪表板,每个选项卡都会触发和.py文件,该文件呈现plotly对象的不同元素 例如,我的回调函数返回绘图、图表,我希望返回Datatable 我可以使用go.Table渲染pandas dataframe,如示例所示,但不能使用DataTable,因为DataTable较新,提供了增强的用户体验 import pandas as pd import dash from dash.dependencies import Input, Output, State imp
import pandas as pd
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
import dash_core_components as dcc
import plotly.plotly as py
from plotly import graph_objs as go
from plotly.graph_objs import *
import dash_table
import flask
from datetime import datetime as dt
from app import app
layout = html.Div([
html.Div([
dcc.Dropdown(
id='select',
options=[{'label': i, 'value': i} for i in List],
value='abc',
placeholder="xyz",
style={'width': '100%'}
),
], style={"width": "15%", "margin-left": "20%", "margin-right": "35%"}),
html.Div([
dash_table.DataTable(
id='my-table',
columns=[{"name": i, "id": i} for i in df_lease.columns],
)
])
])
@app.callback(Output('my-table', 'data'),
[
Input("landlord-select", "value")
]
)
def render_table(company, market):
df_sub1 = df_lease[(df_lease['Landlord'] == company)]
df_sub1 = df_sub1[['UnitNo',
'Commencement_Date',
'Expiration_Date'
]]
return df_sub1.to_dict(orient='records')
预期的行为是将数据帧呈现为DataTable
文件结构:
- app.py
- index.py
- apps
|-- __init__.py
|-- app1.py
|-- app2.py
index.py包含呈现多页/选项卡布局的所有代码,传递模板文件(app1.py)中的布局对象时,dcc.Tabs
的子属性将更新。我认为,这就是产生错误的原因
app.layout = html.Div([
# tabs
html.Div([
dcc.Tabs(
id="tabs",
style={"height":"60","verticalAlign":"middle"},
children=[
dcc.Tab(label="Marketing", value="marketing_tab"),
dcc.Tab(label="Tenants", value="tenants_tab"),
dcc.Tab(label="Portfolio", value="portfolio_tab"),
],
value="marketing_tab",
)
],
className="row tabs_div"
),
# Tab content
html.Div(id="tab_content", style={"margin": "2% 3%"})
])
@app.callback(Output("tab_content", "children"),
[
Input("tabs", "value")
]
)
def render_content(tab):
"""
For user selections, return the relevant tab
"""
if tab == "marketing_tab":
return marketing.layout
elif tab == "tenants_tab":
return tenants.layout
elif tab == "portfolio_tab":
return portfolio.layout
else:
return marketing.layout
# In[10]:
if __name__ == '__main__':
app.run_server(debug=True)
有一些很好的例子供你参考。基本上,您希望回调更新表的数据属性。大概是这样的:
@app.callback(
输出('my-table','data'),
[输入('dropdown','value')])
定义a(i):
df=pd.DataFrame(numpy.arange(30).重塑(5,6))
将测向返回到目录(orient='records')
定义表的列非常重要,这样每个列的id
都与数据框中的列名匹配。如果您正在更改表中的数据,则可能需要另一个回调/输出来更新列
属性。谢谢。因此,我尝试更新数据属性。但是,我遇到了InvalidCallbackReturnValue错误。组件选项卡内容的属性子级回调返回了一个类型为module的值,该值不可JSON序列化。
这可能是因为我的文件结构和多页布局,正如我在问题中指出的那样。你能用新代码更新你的问题吗,包括尽可能多的导入和回调结构?我会再看一看,看看是否能帮上忙。此链接可能会有帮助:。布局呈现为dcc.Tabs的子属性。@keval,错误是上面没有显示的代码。这是来自你的其他应用程序吗?您也可以分享吗?pip install dash==1.0.0