链接ipython小部件下拉列表和滑块值

2024-09-26 22:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我“理解”如何将文本框链接到滑块(通过“理解”我是指如何使其工作):

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'))

结果如下:

linking widgets

但是有没有什么方法可以将一个下拉框(其值为list_items = ('case1', 'case2', 'case3'))链接到FloatSlider,其中对应的值是(3.4, 5.4, 6.7)?在


Tags: fromimportvalue链接stepdisplaylinkwidgets
1条回答
网友
1楼 · 发布于 2024-09-26 22:42:10

是的,你可以。在

使用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

^{pr2}$

使用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中的变化,使链接双向

相关问题 更多 >

    热门问题