首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将ipywidgets.widgets.widget_output.Output转换为列表

将ipywidgets.widgets.widget_output.Output转换为列表
EN

Stack Overflow用户
提问于 2020-04-08 04:32:54
回答 2查看 576关注 0票数 1

我已经创建了一个函数,允许用户从核对表中进行选择并返回所选值。问题是返回的检查表是ipywidgets.widgets.widget_output.Output类型的,而我找不到一种方法来提取结果中的值。

代码语言:javascript
运行
复制
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‘结果后:

代码语言:javascript
运行
复制
Displays just fine: 
['label2']

But cannot print or use in any way. Print result: 
Output()

Checklist type: <class 'ipywidgets.widgets.widget_output.Output'>

在某些情况下,您还可以将其打印出来(核对表)并生成:

代码语言:javascript
运行
复制
Output(outputs=({'output_type': 'stream', 'text': "['label2']\n", 'name': 'stdout'},))

我显然已经尝试了list(checklist),checklist.text,checklist‘’text‘,但都没有效果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-08 16:39:38

尝试将selected_data列表上移到全局作用域:

代码语言:javascript
运行
复制
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,并获取当前选定的值。

票数 1
EN

Stack Overflow用户

发布于 2020-04-10 00:20:49

实际上,经过进一步的调查,这个问题并不是关于局部变量,而是返回正确的局部变量!只需返回'selected_data‘而不是out,它就会返回一个选择列表!

代码语言:javascript
运行
复制
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)}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61088940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档