我“理解”如何将文本框链接到滑块(通过“理解”我的意思是如何使其工作):
from traitlets import link
a = widgets.FloatText(value=4.)
b = widgets.FloatSlider(min=3,max=7,step=0.23,value=4.)
display(a,b)
mylink = link((a, 'value'), (b, 'value'))
这导致如下:
但是有什么方法可以将下拉框与list_items = ('case1', 'case2', 'case3')
的{{1}}相关联,其中相应的值将是例如FloatSlider
。 (3.4, 5.4, 6.7)
?
答案 0 :(得分:2)
是的,你可以。
directional_link
link
功能将两个相同类型的特征联系在一起。如果您需要对其中一个特征应用转换,则应使用directional_link
:
from ipywidgets import Dropdown, FloatSlider
from traitlets import directional_link
from IPython.display import display
a= Dropdown(options=['case1', 'case2', 'case3'])
b= FloatSlider(min=3, max=7, step=0.23, value=4)
def transform(case):
return {'case1': 3.4, 'case2': 5.4, 'case3': 6.7}[case]
directional_link((a, 'value'), (b, 'value'), transform)
display(a, b)
请注意,这只是一种方式,a --> b
,因此更新下拉列表会更新滑块,但不是相反。如果您希望链接双向进行,则必须使用其他directional_link
:
directional_link((b, 'value'), (a, 'value'), inverse_transform)
observe
observe
是监听小部件中特征变化的标准方法。如果你想要触发更复杂的行为而不仅仅是链接两个特征,那么这就是你想要的方法。
在你的例子中:
def update_slider(change):
b.value = {'case1': 3.4, 'case2': 5.4, 'case3': 6.7}[a.value]
a.observe(update_slider, names='value')
再次,这只是一种方式(a --> b
)。观察b
中的更改以进行双向链接