Dynamic

Dynamic[expr]

表示一个显示 expr 动态更新值的对象. 如果用交互方式改变或编辑 Dynamic[expr],则赋值 expr=val,给出 expr 新值 val,且该值与显示形式一致.

Dynamic[expr,None]

不允许交互方式改变或编辑.

Dynamic[expr,f]

val 进行交互式改变或编辑时继续计算 f[val,expr].

Dynamic[expr,{f,fend}]

在交互式改变或编辑完成时计算 fend[val,expr].

Dynamic[expr,{fstart,f,fend}]

在交互式改变或者编辑开始时计算 fstart[val,expr].

更多信息和选项

  • Dynamic[expr] 不仅可以直接显示为表达式,也可以显示为基本图形的坐标或者滑尺之类的对象,或作为选项的设置.
  • 当用于通过交互运算为 expr 赋值时, Dynamic[expr] 中的表达式通常是一个符号 x、一个对象 x[i]、一个部分 e[[i]] 或者一个列表 {x,y,}.
  • 例如在图形中,Point[Dynamic[{x,y}]] 表示一个点,其坐标根据 xy 的当前值动态更新.当该点交互移动时,执行 {x,y}={valx,valy} 形式的赋值. Point[Dynamic[{x,y}]] 可以交互移动; 而Dynamic[Point[{x,y}]] 不行.
  • Dynamic[expr] 需要 expr 值时便会对其进行计算,它确定其中任何变量值的类型,虽然有些可能已经被改变.
  • 如果 RefreshClock 对象出现在 Dynamic[expr] 的表达式计算中,则 expr 将通常需要重新计算.
  • Dynamic 具有属性 HoldFirst, 所以在需要显示 expr 值之前不对其进行计算.
  • Dynamic[expr] 等价于 Dynamic[expr,(expr=#)&].
  • Dynamic[expr,f] 使交互式运算不改变 expr,除了因为 f[val,expr] 计算.
  • Dynamic[expr,None] 表示对象不能交互式改变,但是如果 expr 的值由于其它原因改变时它也会改变.
  • Dynamic[expr,Temporary] 允许一个对象的显示形式在交互式运算过程中改变,但是只会在运算完成后对 expr 赋值更新.
  • 对交互式鼠标操作而言,Dynamic[expr,{fstart,f,fend}] 通常在按下鼠标时计算 fstart[val,expr],然后在鼠标移动时计算 f[val,expr],然后在鼠标释放时计算 fend[val,expr].
  • 如果鼠标未移动,则 fstartffend 分别只计算一次.
  • f[val,expr] 每次在 fstart[val,expr] 计算后立即进行计算,最后计算完成时,val 的值总是与 fend[val,expr] 中相同.
  • 可以影响 Dynamic 对象的交互式操作包括拖曳图形中的元素或者类似 Slider 对象中的元素,以及诸如 InputField 对象中的字段编辑.
  • 函数 fstartffend 可以如下:
  • Automatic利用 Set 赋值
    None不执行动作
    Temporary允许交互式操作以临时改变
    func计算 func[val,expr]
  • Dynamic[expr,f] 等价于 Dynamic[expr,{None,f,None}].
  • Dynamic[expr,Temporary] 等价于 Dynamic[expr,{None,Temporary,Automatic}].
  • Dynamic[expr,f] 可用于对 expr 的赋值进行约束.
  • expr 为类似 x+y 的表达式时,Dynamic[expr,f] 可用于为单独变量赋值.
  • 一个函数 func[val,expr] 如果要为 expr 赋值就应该具有属性 HoldRest.这可以利用 Function[{v,e},body,HoldRest] 实现.
  • 可以给出以下可选项:
  • BaseStyle {}所显示的对象的基本样式指定
    Deinitialization NoneDynamic 不能再显示时,计算的表达式
    Evaluator Automatic用于计算的核
    Initialization NoneDynamic 首次被显示时进行计算的表达式
    ShrinkingDelay 0.如果被显示对象缩小,在缩小前延迟多长时间
    SynchronousUpdating True是否对内容进行同步计算
    TrackedSymbols All符号变化触发更新
    UpdateIntervalInfinity进行更新的时间间隔
  • Dynamic[e]StandardFormTraditionalForm 中显示为 e 的当前的动态更新值,同 Dynamic[e]InputFormOutputForm 中一样.
  • 出于显示的需要,Dynamic[expr] 在明确要求数值的地方提供一个模拟赋值的显示,而不是进行表达式计算.

范例

打开所有单元关闭所有单元

基本范例  (1)

Dynamic 仅返回其赋值的当前值:

赋一个值以更新以上输出:

把符号 结合到一个 Slider

范围  (24)

基本动态  (6)

Dynamic 内可以设置任意表达式:

Dynamic 不显示在 StandardForm 中,但仍然存在:

Dynamic 链接依据 的当前显示值:

在默认情况下,Dynamic 中的变量不是局部变量:

DynamicModule 设定局部变量:

并且初始化变量:

Dynamic 表达式可以自触发:

Slider 共用:

诸如 RandomRealDateString 的表达式不会自动更新:

UpdateInterval 指定动态更新:

Dynamic 保持它的变量,并且除非作为输出显示,否则不计算它:

由于上面的 Dynamic 从未显示,因此不执行赋值:

放置动态  (3)

Plot 需要特定数值来生成输出:

不同的 Dynamic 表达式分别更新,这样可以提高效率:

Dynamic 置于图形坐标周围,用图形作为控件输入:

用图形坐标作为控件输入并且观察滑尺效果:

交互式动态  (8)

Dynamic 连接有交互式控制的变量,例如 Slider

Slider2D

InputField

TemplateBox[{ColorSlider, paclet:ref/ColorSlider}, RefLink, BaseStyle -> {InlineFormula}]

PopupMenu

Locator

Dynamic 控制视图元素,例如 TabView

FlipView

PopupView

OpenerView

Dynamic 设置前端的选项,如 ImageSize

高级动态  (7)

在默认情况下,Dynamic 用在交互元素中时执行赋值运算:

用第二自变量指定一个交互过程中进行计算的函数:

提供一个在交互过程中和交互后进行计算的双函数列表:

提供一个在交互过程中和交互后进行计算的三函数列表:

Temporary 在交互作用结束时更新动态变量:

None 拒绝更新动态变量:

Dynamic 还为可交互式设置的前端选项执行分配操作:

选项  (8)

BaseStyle  (1)

设置基本样式:

Deinitialization  (1)

指定当输出不再被显示时进行计算的表达式:

Evaluator  (1)

指定只在名称为 "Local" 的核内运行的 Dynamic

Initialization  (2)

在默认情况下,外部定义在核心进程之间丢失:

Initialization 计算在显示输出时需要的表达式:

ShrinkingDelay  (1)

赋一个数值或图形:

ShrinkingDelay 允许收缩输出尺寸前减少时间:

SynchronousUpdating  (1)

防止长运算超时或暂停系统:

TrackedSymbols  (1)

仅当 x 变化时更新 y

应用  (5)

把一个点的坐标限制在一个圆上:

构造一个动态计算界面:

生成一个定时器跟踪间隔时间(分秒),用 Trigger 作为控件:

生成一个国家形状的简单界面:

构造自定义控件,例如一个范围为 的箭头滑尺:

一个范围为 的箭头滑尺:

属性和关系  (4)

Dynamic 可用于直接显示其内容:

只显示的 Dynamic 并没有交互性,第二个参数对它没有影响:

另外,可将 Dynamic 作为一个值赋给交互控件、对象或选项:

当交互式改变值时,作为值使用的 Dynamic 会调用第二个参数:

等到结果显示在屏幕上时,动态表达式才会计算其内容:

显示结果也不能保证表达式会立即解决:

如果时机很重要,则需使用 FinishDynamic

同步发生的动态根据 DynamicEvaluationTimeout 的值受时间限制:

若某运算动态使用 $DynamicEvaluation 计算,则其可以检测:

可能存在的问题  (4)

以下范例不成立,因为赋值运算失败:

Dynamic 的第二自变量控制赋值运算:

自触发 Dynamic 可以很容易造成无限循环(删除该输出使之停止):

在默认情况下,观看元素在显示前生成完整内容:

Dynamic ImageSize->Automatic 只在显示时生成内容:

没有初始化 Module 变量,返回 Module 变量泄漏了符号的名称:

通常,应使用 DynamicModule 把变量初始化和本地化:

也可以用 DynamicModule 整个封装起来:

巧妙范例  (6)

成对的 Slider

成对的 Slider2D

一个下垂Slider

使一个圆盘跟随鼠标移动,鼠标超过图形区域时则居中:

当鼠标离开图形区域时记住其最后位置:

在框架区内点击并观察弹球:

Wolfram Research (2007),Dynamic,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Dynamic.html.

文本

Wolfram Research (2007),Dynamic,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Dynamic.html.

CMS

Wolfram 语言. 2007. "Dynamic." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Dynamic.html.

APA

Wolfram 语言. (2007). Dynamic. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Dynamic.html 年

BibTeX

@misc{reference.wolfram_2024_dynamic, author="Wolfram Research", title="{Dynamic}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/Dynamic.html}", note=[Accessed: 16-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_dynamic, organization={Wolfram Research}, title={Dynamic}, year={2007}, url={https://reference.wolfram.com/language/ref/Dynamic.html}, note=[Accessed: 16-November-2024 ]}