HTMLTemplateFormatter的自定义模板,具有Bokeh DataTable的CSS样式

时间:2019-06-22 16:15:33

标签: python css bokeh

我正在尝试使用一个DataTable设置一个小的Bokeh应用程序,该数据表可能包含长文本,具体取决于列。我希望有一个很好的工具提示工具来显示完整的截断文本,同时将鼠标移到相应的单元格上方。

我遇到了一个先前的问题,该问题可能做得很好,但是我无法获得正确的结果。 这是上一个问题:How to add HoverTool to a Data Table (Bokeh, Python)

我正在研究的解决方案是Ferrard提供的具有良好CSS样式的解决方案。

不幸的是,我对CSS和html几乎一无所知。

这是我要复制的代码。

main.py

main.py:

from os.path import dirname, join
import pandas as pd
from bokeh.io import curdoc, show
from bokeh.models import ColumnDataSource, Div
from bokeh.models.widgets import DataTable, TableColumn, HTMLTemplateFormatter
from bokeh.layouts import layout

template = """<div class="tooltip-parent"><div class="tooltipped"><%= value %></div><div class="tooltip-text"><%= value %></div></div>"""

df = pd.DataFrame([
    ['this is a longer text that needs a tooltip, because otherwise we do not see the whole text', 'this is a short text'],
    ['this is another loooooooooooooooong text that needs a tooltip', 'not much here'],
], columns=['a', 'b'])

columns = [TableColumn(field=c, title=c, width=20, formatter=HTMLTemplateFormatter(template=template)) for c in ['a', 'b']]

table = DataTable(source=ColumnDataSource(df), columns=columns)

l = layout([[table]])

curdoc().add_root(l)

show(l)

desc.html

<style>
.tooltip-parent {
    width: 100%;
}

.tooltipped {
    overflow: hidden;
    width: 100%;
}

.tooltip-text {
    visibility: hidden;
    width: 250px;
    background-color: rgba(0, 0, 0, 1);
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 5px 5px;
    position: relative;
    z-index: 1;
    top: 100%;
    left: 0%;
    white-space: initial;
    text-align: left;
}

.tooltipped:hover + .tooltip-text {
    visibility: visible;
}

div.bk-slick-cell {
    overflow: visible !important;
    z-index: auto !important;
}
</style>

<h1>Tooltip demo</h1>

这很愚蠢,但是我真的不知道应该将desc.html文件放在我的工作目录中,以便bokeh服务器可以调用它...我阅读了bokeh文档,并注意bokeh的目录格式,但是没有设法使用静态目录或模板目录来获得正确的结果。

这是我想要的最终结果 https://i.stack.imgur.com/SB815.png(没有足够的声誉来链接图像)

我身边只有DataTable,没有“ Tooltip demo”标题,也没有任何工具提示。

这是我的第一个问题,希望一切都好:)

1 个答案:

答案 0 :(得分:1)

在目录样式的应用中,您可以制作具有以下结构的templates/index.html模板:

{% extends base %}

{% block title %}My Bokeh App{% endblock %}

{% block preamble %}
<style>
    /* your styles here */
</style>
{% endblock %}

应用将使用包含您的样式表的index.html自动呈现自己。通常,最好有更简单的方法向Bokeh应用程序添加额外的样式表规范。我鼓励您打开GitHub issue进行讨论。