TypeError:ipyaggrid 表格单元格渲染器的不可序列化对象

问题描述 投票:0回答:1

我使用“ipyaggrid”库。我想将所有价格值转换为带有 2 位小数的浮点格式,并添加前缀 £。请告诉我我做错了什么以及如何解决它,我收到了错误

TypeError: Unserializable object <function currency_renderer at 0x0000026B9F46AB60> of type <class 'function'>
。感谢您的帮助

def currency_renderer(params):
    formatted_value = "£{:.2f}".format(float(params.value))
    return formatted_value


def create_aggrid(df):
    currency_columns = ['size', 'pnl', 'commission']
    column_defs = [
        {
            'headerName': column,
            'field': column,
            'cellRenderer': currency_renderer if column in currency_columns else None
        }
        for column in df.columns
    ]

    grid_options = {
        'columnDefs' : column_defs,
        'defaultColDef': {'sortable': 'true', 'filter': 'true', 'resizable': 'true'},
    }

    ag_grid = grid.Grid(grid_data=df,
            export_mode="buttons",
            columns_fit='auto',
            grid_options=grid_options,
            theme='ag-theme-balham',
            keep_multiindex=False,
            center=True)
    
    return ag_grid
python-3.x
1个回答
0
投票

currency_renderer(params)
不应该是一个JavaScript函数吗?

根据这个例子:

https://gitlab.com/DGothrek/ipyaggrid/-/issues/6

“cellRenderer”函数是这样内嵌定义的

column_defs = [{'headerName':'Test','field':'test', 'cellRenderer':'''function(params){
                   return (params.value);
               }'''},
    ]

您的案例应该是这样的:

column_defs = [
    {
        'headerName': column,
        'field': column,
        'cellRenderer': '''function(params){
                   return ("£{:.2f}".format(float(params.value)));
               }''' if column in currency_columns else None
    }
    for column in df.columns
]
© www.soinside.com 2019 - 2024. All rights reserved.