首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Dash - datatable中设置单元格的动态条件格式

如何在Dash - datatable中设置单元格的动态条件格式
EN

Stack Overflow用户
提问于 2020-03-23 22:02:56
回答 1查看 1.2K关注 0票数 1

超级棒!我是dash新手。面对一个问题:我有一个带有值的datatable,我正在通过回调通过输入来更新它。他们的工作就像

代码语言:javascript
运行
复制
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)等的情况下改变背景颜色。

代码语言:javascript
运行
复制
{'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'}

有没有办法对它进行编码?

EN

回答 1

Stack Overflow用户

发布于 2021-07-19 02:23:19

主要的问题是你的过滤器不是动态的。您的筛选器查询中未解释datafortable.at[8, '2020']。条件将始终为False,因此您的样式将永远不会被应用。

一个简单的动态过滤器可能如下所示:

代码语言:javascript
运行
复制
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_tablestyle_data_conditional回调中添加一个输出。然后,您可以应用上面的想法使过滤器成为动态的。

如果只希望某一行上的格式处于活动状态,可以添加

代码语言:javascript
运行
复制
'row_index': 1

"if"字典中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60815054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档