ipywidgets:更改小部件值后自动更新变量和 运行 代码
ipywidgets: Automatically update variable and run code after altering widget value
我一直在尝试在更改 ipywidget 后自动更新变量和 运行 代码片段。
到目前为止,我找到的唯一部分解决方案是按照 github (here) 上的示例声明一个全局变量类型:
import ipywidgets as widgets
from IPython.display import display
x = 5
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
global x
x = v['new']
slider.observe(on_change, names='value')
display(slider)
理想情况下,我想要实现的是在不使用全局变量的情况下更改小部件后自动更改 x 值,并更改一些先前定义的变量。应该是这样的:
x = 5
y = []
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
x = v['new']
y.append(x)
slider.observe(on_change, names='value')
display(slider)
实现此目的的一种方法是制作一个 class 接受新的小部件值,并进行派生计算。我做了一个简单的添加,但您可以附加到列表中。
import ipywidgets as widgets
class Updated:
def __init__(self):
self.widget_value = None
self.derived_value = None
def update(self, val_dict) -> None:
self.widget_value = val_dict['new']
self.derived_value = self.widget_value + 10
update_class = Updated()
x = 5
y = []
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
update_class.update(v)
slider.observe(on_change, names='value')
display(slider)
然后您可以看到 update_class.widget_value
和 update_class.derived_value
在您移动滑块时如何变化。
我一直在尝试在更改 ipywidget 后自动更新变量和 运行 代码片段。
到目前为止,我找到的唯一部分解决方案是按照 github (here) 上的示例声明一个全局变量类型:
import ipywidgets as widgets
from IPython.display import display
x = 5
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
global x
x = v['new']
slider.observe(on_change, names='value')
display(slider)
理想情况下,我想要实现的是在不使用全局变量的情况下更改小部件后自动更改 x 值,并更改一些先前定义的变量。应该是这样的:
x = 5
y = []
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
x = v['new']
y.append(x)
slider.observe(on_change, names='value')
display(slider)
实现此目的的一种方法是制作一个 class 接受新的小部件值,并进行派生计算。我做了一个简单的添加,但您可以附加到列表中。
import ipywidgets as widgets
class Updated:
def __init__(self):
self.widget_value = None
self.derived_value = None
def update(self, val_dict) -> None:
self.widget_value = val_dict['new']
self.derived_value = self.widget_value + 10
update_class = Updated()
x = 5
y = []
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
update_class.update(v)
slider.observe(on_change, names='value')
display(slider)
然后您可以看到 update_class.widget_value
和 update_class.derived_value
在您移动滑块时如何变化。