下面是一个重新生成错误的完整代码示例。在以前的Bokeh版本中,我能够做到这一点,但是在升级了这段代码之后,不再允许我向GridBox添加一个div。
from bokeh.models import Panel, Tabs
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.io import curdoc
from bokeh.models.widgets import Div
from bokeh.layouts import gridplot
p1 = figure(plot_width=300, plot_height=300)
p1.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
p2 = figure(plot_width=300, plot_height=300)
p2.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
p3 = figure(plot_width=300, plot_height=300)
p3.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
p4 = figure(plot_width=300, plot_height=300)
p4.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
g1 = gridplot([p1, p2, p3, p4], ncols=2, plot_width=800, plot_height=600)
tab1 = Panel(child=g1, title="circle")
tabs = Tabs(tabs=[ tab1 ])
doc = curdoc()
doc.add_root(tabs)
my_div = Div(text="Please wait...")
doc._roots[0].tabs[0].child.children[1].children.append(my_div)这是我收到的错误信息,
ValueError:期望列表的一个元素(Tuple(实例(LayoutDOM),Int,Int),Tuple(实例(LayoutDOM),Int,Int)),获得带有无效项Div的seq (id=‘2515’,.)
发布于 2019-07-09 19:25:54
首先要注意几个问题:
gridplot API。如果您在异常中包含了行号/更多上下文,那么您的问题将于昨天得到回答。doc._roots周围乱搞。由于某种原因,它被标记为“私有”,并且可以在任何时候更改名称或删除,无需警告。(这就是私人的意思,没有任何保证)。您有一个对您创建的Tabs对象的引用,您应该直接更新它。前一段时间对整个布局系统进行了一次非常大的大修。很多,很多错误和问题都被修复了。我们有数千个测试来维护版本兼容性,但是(很明显)这是一个偶然的API破坏。对于用户来说,直接使用GridPlot是不寻常的,这就是它被忽略的原因。children for GridPlot现在必须提供显式的网格坐标,如果查看GridPlot.children的内容,可以看到:
[(Figure(id='1852', ...), 0, 0),
(Figure(id='1889', ...), 0, 1),
(Figure(id='1926', ...), 1, 0),
(Figure(id='1963', ...), 1, 1)]它是包含显式网格位置的元组列表。
所以在你的例子中,你可能想:
tabs.tabs[0].child.children[1].children.append((my_div, 2, 0))但是,我还要注意,您还可以将div附加到包含GridPlot的列中,这似乎更容易实现。
https://stackoverflow.com/questions/56959056
复制相似问题