使用 python 散景获得 window 宽度

Get window width with python bokeh

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

我想格式化 DataTable 宽度以适合我的浏览器 window。

谢谢

首先,您是否尝试过使用 Bokeh 对象的 sizing_mode 属性。您可以使用 scale_width 让 Bokeh 使用页面的整个宽度。


就我个人而言,当 sizing_mode 未设置为固定时,我在使用它时遇到了很多困难。所以这是我使用过的一些解决方案。

仅使用 python 即可获得计算机的屏幕宽度。从那时起,您可以推断浏览器的大小(假设它是全屏的)。

import ctypes
screen_width = ctypes.windll.user32.GetSystemMetrics(0)

如果您需要调整大小的对象不需要响应,并且您只想在加载时适应整个 window。

要获得真正的 window 尺寸,您需要使用 javascript。 window.innerWidth 是您需要调用的属性。

您可以将此值存储在任意 Bokeh 对象中 tags,然后您可以在 python 端读取它。您也可以简单地在自定义 javascript 回调中发送您的 Bokeh 对象,并直接使用 js 设置它的宽度。


如果您的 objective 是响应式对象大小调整,这是一个更难对付的野兽,我不能说我已经尝试过这样做。根据我对 Bokeh 的了解,我认为你最好的选择是创建一个自定义的 Bokeh 对象,它使用 coffeescript 获得 window 大小。然后,您可以向该对象添加一个 on_change 侦听器以调整任意对象的大小。

DataTable 的响应式大小模式似乎存在错误或未记录的行为,并且在 0.12.7 版本中尚未解决。 在我的例子中,我在 DataTable 上方有另一个图,由 layout 组成。如果是这种情况,则有一种纯粹的 python 解决方法。假设上图按宽度缩放,您可以获得 window 宽度,观察该图的 layout_width 属性,如下所示:

def print_width(attr,old,new):
    print(new)
    return
upper_plot.on_change('layout_width',print_width)

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