使用JupyterNotebook从ipywidget函数定义全局变量

问题描述 投票:1回答:1

我正在使用ipywidgets来允许用户选择一些值,我想将小部件内的函数结果分配给该函数之外的变量,并在笔记本的下一个单元格上使用它(我尝试使用全局变量变量,但我无法使其正常运行):

def issuer_choice():

    from ipywidgets import widgets
    from IPython.display import display, clear_output
    import pandas as pd

    def myfunc(idnum):
        return data.loc[idnum]['cod']

    def on_button_clicked(b):
        global ticker
        ticker = myfunc(w.value)
        with output:
            clear_output()
            print('Ticker CIQ: ' + ticker)

    data = pd.read_csv('data.csv', sep=',', index_col = 1)
    w = widgets.Dropdown(options=list(data.index), description = 'Label:')

    button = widgets.Button(description="Obtain ID")
    output = widgets.Output()

    display(w)        
    display(button, output)
    button.on_click(on_button_clicked)
    return ticker

[以result = issuer_choice()的形式调用此函数并单击按钮时,代码每次都设法正确打印ticker,这意味着在选项中进行选择时,函数内的值会更新。但是,在下一个单元格上调用print(result)会显示None,这意味着ticker未分配给result

* data.csv只是一列DataFrame,用于存储ID和名称的列表。

我认为它必须与ticker变量的范围有关,但我不知道。我将不胜感激。

python ipywidgets
1个回答
0
投票

如果要输入global ticker,请确保ticker已经在全局范围内定义,即使将其设置为None,也可以稍后在全局范围内调用它。

[此外,如果您用一个具有相同行为的简单伪造数据帧替换read_csv调用之类的东西,那么可以更轻松地提取和使用示例。

© www.soinside.com 2019 - 2024. All rights reserved.