答案 0 :(得分:3)
首先,您是否尝试过使用Bokeh对象的sizing_mode
属性?您可以使用scale_width
让Bokeh使用整个页面宽度。
当我没有将sizing_mode
设置为固定时,我个人遇到了很多困难。所以这里是我使用的一些解决方案。
仅使用python可以获得计算机的屏幕宽度。从那时起,您可以推断出浏览器的大小,假设它是全屏的。
import ctypes
screen_width = ctypes.windll.user32.GetSystemMetrics(0)
如果您需要调整大小的对象不需要响应,并且您只想在加载时适合整个窗口,那么此解决方案就可以了。
对于真正的窗口大小,您需要使用javascript。 window.innerWidth
是您需要致电的财产。
您可以将此值存储在任意Bokeh对象tags
中,然后您可以在python端读取它。您也可以简单地在自定义javascript回调中发送Bokeh对象,并使用js直接设置它的宽度。
如果你的目标是响应式物体尺寸,这是一个更难解决的野兽,我不能说我试图这样做。根据我对Bokeh的了解,我说你最好的选择是创建一个自定义的Bokeh对象,它使用coffeescript来获取窗口大小。然后,您可以向该对象添加on_change
侦听器以调整任意对象的大小。
答案 1 :(得分:1)
似乎有关于DataTable的响应大小调整模式的错误或未记录的行为,并且在0.12.7版本中尚未解决。 就我而言,我在DataTable上方有另一个图,由 layout 组成。如果这是你的情况,那么就有一个纯粹的python工作。假设上面的图在宽度上缩放,您可以获得窗口宽度,观察该图的layout_width属性,如下所示:
def print_width(attr,old,new):
print(new)
return
upper_plot.on_change('layout_width',print_width)
当然,您可以使用相同的回调来设置数据表宽度。