ipywidgets动态创建复选框和数据选择
ipywidgets dynamic creation of checkboxes and selection of data
我想创建一个复选框列表,以便用户可以从数据列表中select。我已经为每条数据创建了复选框,现在我想勾选这些复选框以将数据添加到列表中。
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 中的复选框表现得像这样。
我找到了一个可行的解决方案,但我觉得它很老套。如果有人对简化它的方法有任何建议,我将不胜感激。
此解决方案允许为 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)
我知道我来晚了,但这可能对以后的其他人有所帮助。
在 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 部分不会连续添加到先前选择的选择中。
您可以检查复选框中的数据并获取值列表。
小部件
data = {
"key1":"value1"
, "key2":"value2"
, "key3":"value3"
}
checkboxes = [widgets.Checkbox(value=False, description=label) for label in data]
output = widgets.VBox(children=checkboxes)
display(output)
获取值列表
selected_data = []
for i in range(0, len(checkboxes)):
if checkboxes[i].value == True:
selected_data.append(data[str([checkboxes[i].description][0])])
print(selected_data)
我想创建一个复选框列表,以便用户可以从数据列表中select。我已经为每条数据创建了复选框,现在我想勾选这些复选框以将数据添加到列表中。
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 中的复选框表现得像这样。
我找到了一个可行的解决方案,但我觉得它很老套。如果有人对简化它的方法有任何建议,我将不胜感激。
此解决方案允许为 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)
我知道我来晚了,但这可能对以后的其他人有所帮助。
在 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 部分不会连续添加到先前选择的选择中。
您可以检查复选框中的数据并获取值列表。
小部件
data = {
"key1":"value1"
, "key2":"value2"
, "key3":"value3"
}
checkboxes = [widgets.Checkbox(value=False, description=label) for label in data]
output = widgets.VBox(children=checkboxes)
display(output)
获取值列表
selected_data = []
for i in range(0, len(checkboxes)):
if checkboxes[i].value == True:
selected_data.append(data[str([checkboxes[i].description][0])])
print(selected_data)