Jupyter 小部件:如何使用 'Button' 根据 'FloatText' 的值更新 'Label' 的内容?

Jupyter widgets: How to use 'Button' to update content of 'Label' based on value of 'FloatText'?

我无法在 Jupyter 中使用小部件来制作一些实际上应该很简单但我无法让它工作的东西:我想要一个用户按 'Button' 来更新内容的 GUI 'Label' 基于 'FloatText'

的值

我试了很多东西都无济于事。这里有两个例子:

示例 1:

from ipywidgets import FloatText, Button, Label, interact

t_str1 = FloatText( description='Strain in %:', value='3' )

b_cs   = Button( description='Compute Stress' )

t_str2 = Label( value='Waiting' )

display( t_str1 ); display( b_cs )

def compute_stress( x ):
    t_str2 = Label( value='Stress = ' + str(x+3)+ 'MPa' )
    display( t_str2 );
    
interact( compute_stress, x=t_str1 );

示例 1 的结果:

示例 2:

from ipywidgets import FloatText, Button, Label, interact

t_str1 = FloatText( description='Strain in %:', value='3' )

b_cs   = Button( description='Compute Stress' )

t_str2 = Label( value='Waiting' )

display( t_str1 ); display( b_cs ); display( t_str2 );

def compute_stress( x ):
    t_str2 = Label( value='Stress = ' + str(x+3)+ 'MPa' )
    
interact( compute_stress, x=t_str1 );

示例 2 的结果:

这就是我想要得到的

要使您的按钮起作用,您需要将 on_click 功能关联到它。然后你也不需要 interact 函数来做你想做的事。此外,为了确保小部件显示在您想要的布局中,您可以使用 VBox。 以下是您实施这些更改时代码的样子:

import ipywidgets as widgets

t_str1 = widgets.FloatText( description='Strain in %:', value='3' )
b_cs   = widgets.Button( description='Compute Stress' )
t_str2 = widgets.Label(value='Waiting' )

vb=widgets.VBox([t_str1,b_cs,t_str2])

def on_click_compute_stress(b):
    t_str2.value='Stress = '+str(t_str1.value+3)+'MPa'

b_cs.on_click(on_click_compute_stress)

display(vb)

并且输出给出: