获取带有python散景的窗口宽度

时间:2017-07-20 14:43:43

标签: python bokeh

是否可以使用Bokeh检索浏览器窗口尺寸,尤其是宽度?

我想格式化DataTable宽度,以便它适合我的浏览器窗口。

由于

2 个答案:

答案 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)

当然,您可以使用相同的回调来设置数据表宽度。