2

我正在创建一个交互jupyter notebookipython 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)

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

在此处输入图像描述

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

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

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

在此处输入图像描述

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

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

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

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

2 回答 2

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)
于 2016-09-06T12:41:24.303 回答
0

您可以使用百分比作为宽度(和高度):

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

并设置cb_cont.overflow_x = 'auto'

于 2016-04-17T15:58:05.733 回答