【问题标题】:ipywidgets dynamic creation of checkboxes and selection of dataipywidgets 动态创建复选框和选择数据
【发布时间】:2019-07-26 12:10:06
【问题描述】:

我想创建一个复选框列表,以便用户可以从数据列表中进行选择。我已经为每条数据创建了复选框,现在我希望勾选这些复选框以将数据添加到列表中。

import ipywidgets as widgets

data = ["data1", "data2", "data3", "data4"]

selected_data = []

checkboxes = [widgets.Checkbox(value=False, description=label) for label in data]

widgets.VBox(children=checkboxes)

我想做一些类似的事情

def add_to_selected(d):
    selected_data.append(d)

checkboxes[0].observe(add_to_selected)

这会在selected_data 列表中添加一个值。我不知道如何让 VBox 中的复选框表现得像这样。

【问题讨论】:

  • 请展示您尝试过的方法,并准确描述它是如何失败或未达到您的期望的。
  • @glibdud 我添加了一个最小的工作示例以及我尝试过但不幸的是不起作用

标签: python jupyter-notebook ipython ipywidgets


【解决方案1】:

我知道我在这里已经很晚了,但这可能会对其他人有所帮助。

在 Jupyter 中,这是您的第一个块:

import ipywidgets as widgets
data = ["data1", "data2", "data3", "data4"]
checkboxes = [widgets.Checkbox(value=False, description=label) for label in data]
output = widgets.VBox(children=checkboxes)
display(output)

上面将输出一个VBox,其中包含列表变量'data'中的四个选项。然后要获取选定值的列表,您可以这样做:

selected_data = []
for i in range(0, len(checkboxes)):
    if checkboxes[i].value == True:
        selected_data = selected_data + [checkboxes[i].description]
print(selected_data)

请注意,我将 selected_data 列表从选择之前移到了之后。这样做的原因是,如果您要运行多次,for 循环的自替换 selected_data 部分不会连续添加先前选择的选择。

【讨论】:

    【解决方案2】:

    我找到了一个可行的解决方案,但我觉得很老套。如果有人对简化它的方法有任何建议,我将不胜感激。

    此解决方案允许为 data 字典中的每个键创建一个复选框。单击复选框时,所选键将添加到 selected_data 列表中。

    import ipywidgets as widgets
    
    data = {"label_1":"data_1", "label_2":"data_2", "label_3":"data_3"}
    
    names = []
    checkbox_objects = []
    for key in data:
        checkbox_objects.append(widgets.Checkbox(value=False, description=key))
        names.append(key)
    
    arg_dict = {names[i]: checkbox for i, checkbox in enumerate(checkbox_objects)}
    
    ui = widgets.VBox(children=checkbox_objects)
    
    selected_data = []
    def select_data(**kwargs):
        selected_data.clear()
    
        for key in kwargs:
            if kwargs[key] is True:
                selected_data.append(key)
    
        print(selected_data)
    
    out = widgets.interactive_output(select_data, arg_dict)
    display(ui, out)
    

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 2013-06-27
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      相关资源
      最近更新 更多