2016-03-08 150 views
2

我創建了一個交互式jupyter notebookipython widgets並希望用戶從一定數量的複選框中進行選擇。我使用下面的代碼來顯示包含複選框的HBox自動調整IPython小部件佈局

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. 從中選擇的複選框的數量取決於以前的計算,並且事先不知道。

回答

0

您可以使用百分比寬度(和高度):

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

,並設置cb_cont.overflow_x = 'auto'

3

我是有小部件,並且具有各種框屬性周圍玩弄後,同樣的問題,這裏是我想出的:

您需要設置以下屬性:

  • display: '內聯-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) 
+0

我一直在玩Flex_flow和flex_wrap屬性一段時間,並且無法使項目包含項目時下拉元素的項目。它只適用於像按鈕等其他元素。 你的答案工作,並在現場!謝謝! –