【问题标题】:automatically adjust IPython widgets layout自动调整 IPython 小部件布局
【发布时间】:2016-03-08 23:19:32
【问题描述】:

我正在使用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)

这是上面代码输出的截图:

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

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

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

内容不溢出,不可见,可以滚动。

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

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

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

【问题讨论】:

    标签: python ipython jupyter jupyter-notebook ipywidgets


    【解决方案1】:

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

    您需要设置以下属性:

    • display: 'inline-flex'
    • 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)
    

    【讨论】:

    • 我已经玩了一段时间的 flex_flow 和 flex_wrap 属性,当项目是下拉元素时,无法让盒子包裹项目。它只适用于其他元素,如按钮等。你的答案很有效,而且很准确!谢谢!
    【解决方案2】:

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

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

    并设置cb_cont.overflow_x = 'auto'

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多