如何将panel.widgets.tables.Tabulator转换为LayoutDOM对象适配Bokeh Panel
你遇到的报错核心是混用了Bokeh原生组件与Panel生态组件:Bokeh自带的Panel、Tabs仅支持接收继承自LayoutDOM的Bokeh原生对象,而你使用的Tabulator是Panel库封装的组件,不属于Bokeh原生LayoutDOM子类,因此无法直接传入Bokeh的Panel作为子元素。
方案1:全量使用Panel组件体系(改动最小)
直接替换Bokeh的Tabs、Panel为Panel库自带的同功能组件,不需要做额外类型转换,修改后代码如下:
from bokeh.models import Select from panel import Tabs, Panel # 替换原有bokeh的Panel、Tabs导入 from bokeh.io import curdoc from irrelevant_code import my_func # 修正原有导入语法错误 chart = my_func() # 保留原有Tabulator生成逻辑 tab1 = Panel(child = summary_layout, title="Summary") tab2 = Panel(child = chart, title="Chart") tabs = Tabs(tabs=[tab1, tab2]) document = curdoc() document.add_root(tabs.get_root()) # 调用get_root方法转为Bokeh可识别的根对象
方案2:保留Bokeh原生Tabs,仅转换Tabulator类型
如果你不想改动现有Tabs相关逻辑,仅需调用Tabulator对象的get_root()方法,即可得到符合要求的LayoutDOM类型对象,只需修改tab2定义行即可:
# 其余导入和逻辑保持不变 tab2 = Panel(child = chart.get_root(), title="Chart")
内容的提问来源于stack exchange,提问作者apoursh
相关产品推荐
相关产品推荐

