自动调整 IPython 小部件布局

Mat*_*teo 2 python ipython jupyter jupyter-notebook ipywidgets

我创建一个交互式的jupyter notebook使用ipython widgets,并希望用户从一定数量的复选框选择。我正在使用下面的代码来可视化HBox包含复选框的内容。

num_checks = 10

cb_cont = widgets.HBox(background_color='red',height='100px',width='100%')

checkboxes = []
for f in range(num_checks):
    checkboxes.append(\
        widgets.Checkbox(description = 'Checkbox [%d]'%(f), \
                         value=False, width=50))

cb_cont.children=[i for i in checkboxes]
display(cb_cont)
Run Code Online (Sandbox Code Playgroud)

以下是上述代码输出的屏幕截图:

在此处输入图片说明

如您所见,框的内容溢出并超出了容器的宽度。

我可以通过设置更改行为overflow_x属性为下列情况之一:['visible', 'hidden', 'scroll', 'auto', 'initial', 'inherit', '']

例如,cb_cont.overflow_x = 'scroll'导致以下输出窗口:

在此处输入图片说明

其中内容不会溢出但变得不可见并且可以滚动。

如何设置框的属性以可视化不适合换行符的内容?

显然,我可以使用多个HBox对象,每个对象都包含适合窗口大小的最大复选框数,但是由于一系列原因,这不是想要的解决方案:

  1. 根据屏幕分辨率,该数字可能会发生变化。
  2. 要选择的复选框数量取决于先前的计算,并且事先不知道。

Ely*_*Ely 5

我在小部件上遇到了同样的问题,在玩弄了各种 Box 属性之后,我想出了以下几点:

您需要设置以下属性:

  • display:'内联弹性'
  • flex_flow:'行包装'

这对我有任意数量的复选框(我尝试了 100 个)。另一方面,设置 height 属性不是很有用。您需要根据复选框的数量或屏幕分辨率来调整高度。

import ipywidgets as widgets
from ipywidgets import *
from IPython.display import display

num_checks = 50

cb_cont = HBox(layout=Layout(width='100%',display='inline-flex',flex_flow='row wrap'))
#cb_cont.overflow_x = 'scroll'

checkboxes = []
for f in range(num_checks):
    checkboxes.append(\
        widgets.Checkbox(description = 'Checkbox [%d]'%(f), \
                     value=False, width=50))

cb_cont.children=[i for i in checkboxes]
display(cb_cont)
Run Code Online (Sandbox Code Playgroud)