如何在调整滑块时获取ipywidgets.interact中的number1、number2数值
ipywidgets.interactive 实时获取滑块参数的方法
有两种常用的实现方案,你可以根据使用场景选择:
方法1:使用可变容器存储实时参数(适配现有代码,修改成本最低)
直接在原有代码基础上新增一个全局可变容器(字典、列表都可以),每次滑块拖动触发函数运行时,自动更新容器内的参数值,你在notebook任意位置都可以直接读取容器内的最新值。
修改后的示例代码如下:
import ipywidgets as widgets # 定义可变字典存储实时参数,初始值和滑块默认值保持一致 current_params = {"number1": 20, "number2": 30} @widgets.interact(number1=20, number2=30) def sum_or_prod(number1, number2): # 滑块变动时自动更新参数值 current_params["number1"] = number1 current_params["number2"] = number2 s_2 = number1 + number2 p_2 = number1 * number2 if p_2 < 1000: print('The result is sum: ' + str(s_2)) else: print('The result is product: ' + str(p_2))
需要取值时直接读取current_params["number1"]、current_params["number2"]即可拿到当前滑块的最新数值。
方法2:显式创建Interactive实例直接读取属性(更规范的通用方案)
@interact装饰器本质是封装了Interactive控件的创建逻辑,你可以不用装饰器写法,手动创建Interactive控件实例,直接从实例属性读取参数值,不需要额外定义存储变量。
示例代码如下:
import ipywidgets as widgets from IPython.display import display def sum_or_prod(number1, number2): s_2 = number1 + number2 p_2 = number1 * number2 if p_2 < 1000: print('The result is sum: ' + str(s_2)) else: print('The result is product: ' + str(p_2)) # 手动创建Interactive实例 interact_widget = widgets.interactive(sum_or_prod, number1=20, number2=30) # 渲染控件 display(interact_widget)
需要取值时直接读取interact_widget.kwargs即可拿到包含两个参数最新值的字典,也可以单独取interact_widget.kwargs["number1"]、interact_widget.kwargs["number2"]获取对应参数值。
两种方案都是实时同步滑块数值,只要拖动滑块,对应存储的参数就会自动更新,不需要额外触发操作。
内容的提问来源于stack exchange,提问作者DrChou
相关产品推荐
相关产品推荐

