我已经创建了一个函数,允许用户从核对表中进行选择并返回所选值。问题是返回的检查表是ipywidgets.widgets.widget_output.Output类型的,而我找不到一种方法来提取结果中的值。
import ipywidgets as widgets
def create_checklist():
data = {"label1": "data1", "label2": "data2"}
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)
return out
checklist = create_checklist()
print("Displays just fine: ")
display(checklist)
print("But cannot print or use in any way. Print result: ")
print(checklist)
print(f"\nChecklist type: {type(checklist)}")
选择'label2‘结果后:
Displays just fine:
['label2']
But cannot print or use in any way. Print result:
Output()
Checklist type: <class 'ipywidgets.widgets.widget_output.Output'>
在某些情况下,您还可以将其打印出来(核对表)并生成:
Output(outputs=({'output_type': 'stream', 'text': "['label2']\n", 'name': 'stdout'},))
我显然已经尝试了list(checklist),checklist.text,checklist‘’text‘,但都没有效果。
发布于 2020-04-08 16:39:38
尝试将selected_data
列表上移到全局作用域:
import ipywidgets as widgets
selected_data = [] # in global scope rather than local scope to function
def create_checklist():
data = {"label1": "data1", "label2": "data2"}
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)
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)
return out
checklist = create_checklist()
然后,您应该能够在以下单元格中的任何位置调用selected_data
,并获取当前选定的值。
发布于 2020-04-10 00:20:49
实际上,经过进一步的调查,这个问题并不是关于局部变量,而是返回正确的局部变量!只需返回'selected_data‘而不是out,它就会返回一个选择列表!
import ipywidgets as widgets
def create_checklist():
data = {"label1": "data1", "label2": "data2"}
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)
return selected_data
checklist = create_checklist()
print("Print checklist: ")
display(checklist)
print(f"\nChecklist type is list: {type(checklist)}")
https://stackoverflow.com/questions/61088940
复制相似问题