超级棒!我是dash新手。面对一个问题:我有一个带有值的datatable,我正在通过回调通过输入来更新它。他们的工作就像
data = pd.read_excel('Sample.xlsx')
app_layout=html.Div([
html.Div([dcc.Input(id='salary_budget_2020', type='number')]),
html.Div([html.Div(dash_table.DataTable(
id='dinamic_table',
columns=[{"name": i, "id": i} for i in datafortable.columns],
data=datafortable.to_dict("rows")))])
])
@app.callback(dash.dependencies.Output("dinamic_table", "data"),
[dash.dependencies.Input("salary_budget_2020", 'value')])
def update_table(salary_budget_2020):
datafortable = data.copy()
datafortable.at[8, '2020'] = datafortable.at[8, '2020'] - int(salary_budget2020 or 0)
return datafortable.to_dict('rows')我想要做的是根据原始值和更新值之间的比较结果来设置单元格的条件格式。我在文档中找到了‘filter_query’,但它不适用于我的更新值变量。
我需要的是能够比较datafortable.at8,‘2020’和datafortable.at8中的原始值,‘2020’- int(salary_budget2020或0),以便能够在datafortable.at8,‘2020’< datafortable.at8,‘2020’- int(salary_budget2020或0)等的情况下改变背景颜色。
{'if': {'column_id': '2020',"row_index": 8,
'filter_query': 'datafortable.at[8, '2020'] < datafortable.at[8, '2020'] - int(salary_budget2020 or 0)},'backgroundColor': '#3D9970','color': 'white'}有没有办法对它进行编码?
发布于 2021-07-19 02:23:19
主要的问题是你的过滤器不是动态的。您的筛选器查询中未解释datafortable.at[8, '2020']。条件将始终为False,因此您的样式将永远不会被应用。
一个简单的动态过滤器可能如下所示:
from dash import Dash
import pandas as pd
import dash_table
df = pd.DataFrame({"A": [1, 2, 3]})
x = df.at[1, "A"]
app = Dash(__name__)
app.layout = dash_table.DataTable(
data=df.to_dict("records"),
columns=[{"name": i, "id": i} for i in df.columns],
style_data_conditional=[
{
"if": {"filter_query": f"{{{column}}} = {x}"},
"backgroundColor": "#3D9970",
"color": "white",
}
for column in df.columns
],
)
if __name__ == "__main__":
app.run_server()在上面的示例中,f"{{{column}}}等于{A}。
在上面的示例中,f"{x}等于2。
因此,条件格式设置逻辑是这样的:对于每一列,如果有一个单元格值等于x,则应用格式设置。
在你的回调中,你只是在更新数据。即使过滤器保持不变,如果数据发生变化,格式也可能发生变化。如果过滤器本身也需要根据输入进行更改,您可以在dynamic_table的style_data_conditional回调中添加一个输出。然后,您可以应用上面的想法使过滤器成为动态的。
如果只希望某一行上的格式处于活动状态,可以添加
'row_index': 1在"if"字典中。
https://stackoverflow.com/questions/60815054
复制相似问题