如何使Bokeh Datatable快速适应

时间:2019-03-04 09:22:54

标签: python bokeh

我试图使我的数据表适合全宽,但我正在努力实现这一目标。

我想避免给表加上一个固定值。

这是表格的代码。我正在使用get_table函数生成它,并使用componnets_web函数获取div和script标签。然后使用bokeh.layouts.layout将其显示在其他位置。

def get_table(self):
    '''
    creates a bokeh table widget from provided dataframe.
    :param dataframe: A pandas dataframe
    :return: data_table: A Bokeh widget
    '''

    from bokeh.models.widgets import DataTable, TableColumn

    source = ColumnDataSource(self.dataframe)
    columns = [TableColumn(field=f, title=f) for f in self.headers]
    data_table = DataTable(source=source, columns=columns)

    return data_table

def components_web(plot):
    '''
    Generates html components for web display.
    :param plot: A bokeh plot
    :return: script: A html <script> tag with render javascript, div a <div> tag with html to display a bokeh plot,
    resources: A <script> tag with javascript to render bokeh plots.
    '''

    from bokeh.resources import CDN
    from bokeh.embed import components

    script, div = components(plot, CDN)

    return script, div

然后实际显示它并获得布局:

    table = br.get_table()
    script, div = br.components_web(layout([table], sizing_mode='stretch_both'))
    resource = br.bokeh_web_resources()

关于如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以尝试通过在浏览器中检查Bokeh表css类来覆盖Bokeh CSS样式,并创建自己的宽度属性,而不是将其放在外部style.css文件中,并通过添加{{1 }}属性为TableColumn和DataTable。但是,这可能会非常困难,因为有很多类,而且您不确切知道要定位哪些类。

相反,我建议采用以下解决方案,您可以在其中允许用户使用滑块设置自定义表格宽度。同样的想法也可以应用于桌子的高度。

css_classes = ["my_class"]

答案 1 :(得分:0)

我很幸运通过确保将表中保存的所有组件都设置为sizing_mode = "stretch_both"

例如,在您的代码中,您为sizing_mode = "stretch_both"指定了layout,但没有为table本身指定。我会尝试从那开始。如果您有更多的嵌套(在代码片段中不太明显),则可能需要为其他组件指定大小调整模式。祝你好运!