widget.interact 在函数内定义参数不会更新滑块

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

我正在尝试初始化函数参数的值,否则通过小部件控制。 我想在第一次调用该函数时执行此操作,然后响应用户输入。

例如:

import ipywidgets as widgets
init = True
def test(a):
    global init
    if init:
        a = 0.5       # would in practice need some processing
        init = False
    print(a)
    
widgets.interact(test, a = (0,2,.1))

我知道如何通过在定义中设置函数的参数来设置初始小部件值:

import ipywidgets as widgets
init = True
def test(a=0.5):
    print(a)
    
widgets.interact(test, a = (0,2,.1))

但这不是我想要实现的目标。

上面的第一个例子并没有达到我想要的效果,但我想知道我想要实现的目标在概念上是否可能。毕竟,widget 不是一个“指示器”,而是一个“控件”…… 换句话说,有没有一种方法可以与小部件“对话”并从它控制的函数内更新其值?

widget jupyter
1个回答
0
投票

坚持使用

interact()
,您可以传入一个小部件来指定选项,如此处所述。
将其与您的代码之类的内容放在一起:

from ipywidgets import interact
import ipywidgets as widgets
import random
max_secret = 10
secret = random.randint(1, max_secret)

slider = widgets.IntSlider(
    value=secret,
    min=0,
    max= max_secret,
    step=1,
    description='Choose value:',
    disabled=False,
    continuous_update=False,
    orientation='horizontal',
    style= {'description_width': 'initial'},
    readout=True,
    readout_format='d'
)

def test_func(x):
    output.update(f"The current value is: {slider.value}          That value times 5 is {slider.value * 5}")

output = display(f"The starting value is: {slider.value}", display_id=True)

interact(test_func, x=slider);
© www.soinside.com 2019 - 2024. All rights reserved.