【发布时间】:2020-05-05 07:05:59
【问题描述】:
我正在使用 Bokeh DataTable 来呈现一个可编辑的表格,如果用户更改了值,我希望为单元格中的文本着色。
我试图使用HTMLTemplateFormatter,但我不知道该怎么做。
如果用户更改了第 2 行的值,我希望文本的颜色如下:
基于How to color rows and/or cells in a Bokeh DataTable?的示例:
from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, HTMLTemplateFormatter
orig_data = dict(
cola=[1, 2, 3, 4, 5, 6],
)
data = orig_data
source = ColumnDataSource(data)
template = """
<div style="color: <%=
(function colorfromint(){
if(orig_data.cola != data.cola){return('red')} // I don't know what to write here
}()) %>;">
<%= value %>
</font>
</div>
"""
formatter = HTMLTemplateFormatter(template=template)
columns = [TableColumn(field="cola", title="CL1", formatter=formatter, width=100)]
data_table = DataTable(source=source,
columns=columns,
editable=True,
width=100)
curdoc().add_root(data_table)
我可以使用HTMLTemplateFormatter 块比较不同的表吗?
如果没有,来自HTMLTemplateFormatter Bokeh documentation:
“格式化程序可以通过传递给格式化程序的 dataContext 对象访问行中的其他项目”
所以我能想到的一种解决方案是加入表格并与 dataContext 对象进行比较,只显示我选择的列
但是,我不知道该怎么做,在我看来这是一个“肮脏”的解决方法
我对 python 很熟悉,但我是 Bokeh 的新手。
有没有好又简单的方法呢?
也许除了HTMLTemplateFormatter之外的其他方法?
【问题讨论】:
-
您想只为单个列提供这样的功能吗?或者任意数量的列?
-
任意数量的列,我希望能够为DataTable中的每个单元格应用它