自动调整IPython小部件布局

时间:2016-03-08 23:19:32

标签: python ipython jupyter jupyter-notebook ipywidgets

我正在使用ipython widgets创建交互式jupyter notebook,并希望用户从一定数量的复选框中进行选择。我正在使用下面的代码来显示包含复选框的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)

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

enter image description here

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

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

例如,cb_cont.overflow_x = 'scroll'会产生以下输出窗口:

enter image description here

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

如何设置框的属性以显示不适合换行符的内容?

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

  1. 取决于数字可能会更改的屏幕分辨率。
  2. 要选择的复选框的数量取决于先前的计算,并且事先不知道它。

2 个答案:

答案 0 :(得分:4)

我对小部件有同样的问题,在玩各种Box属性之后,这就是我想出的:

您需要设置以下属性:

  • display:' inline-flex'
  • flex_flow:' row wrap'

这对我来说有任意数量的复选框(我尝试过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)

答案 1 :(得分:0)

您可以使用百分比表示宽度(和高度):

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

并设置cb_cont.overflow_x = 'auto'