ins*_*ect 6 wolfram-mathematica
我已经创建了一个函数test [],如果需要的话,它也可以是一个符号测试,我试图在一个操作中实现它.test []看起来像这样:
test[]:=Button["Label",Functionality[]];
Run Code Online (Sandbox Code Playgroud)
如果直接在Manipulate []中使用,这将返回错误,但如果它包含在Dynamic或Evaluate中,则会起作用.
Manipulate[content,test[]];
Run Code Online (Sandbox Code Playgroud)
Manipulate :: vsform:Manipulate参数test []没有正确的变量规范形式.
Manipulate[content,Dynamic[test[]]]
Run Code Online (Sandbox Code Playgroud)
这个工作
Manipulate[content,Evaluate[test]]
Run Code Online (Sandbox Code Playgroud)
请注意,虽然这有效,但测试不是一个功能
Manipulate[content,Evaluate[test[]]]
Run Code Online (Sandbox Code Playgroud)
这适用于我的Mac,但不是我的PC在工作...
我认为这个问题与Manipulate是HoldAll有关,但是不明白为什么Dynamic []应该解决这个问题.此外,Evaluate []只会在某些时候起作用.
那么,为什么Dynamic []或Evaluate []是必要的呢?查看高级操作教程的自定义控制器部分,我看不到对此问题的引用,并且在其他地方找不到任何内容.
您可以内联Button
而不是使用单独的test[]
函数.否则,你最后一个例子,Manipulate[content,Evaluate[test[]]]
,确实显示出在数学8.我的机器上的按钮应该有平台(Windows或Mac)之间没有什么区别.
如果你做的事情与Manipulate
默认提供的东西有很大的不同,你可能会发现从头开始构建它更方便Dynamic
(这是我通常做的).
这是一个如何将一些按钮包含为控制器的示例.
首先,设置一些内容显示在Manipulate
:
rotate90[{x_, y_}] := {-y, x}
koch[p1_, p2_, n_] := {koch[p1, p1 + (p2 - p1)/3, n - 1],
koch[p1 + (p2 - p1)/3, (p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1],
n - 1], koch[(p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1],
p2 - (p2 - p1)/3, n - 1], koch[p2 - (p2 - p1)/3, p2, n - 1]}
koch[p1_, p2_, 0] := Line[{p1, p2}]
snowflake[n_] :=
Graphics[{koch[{0, 0}, {1, 0}, n],
koch[{1, 0}, {1/2, -Sqrt[3]/2}, n],
koch[{1/2, -Sqrt[3]/2}, {0, 0}, n]}]
Run Code Online (Sandbox Code Playgroud)
然后设置Manipulate
自己:
Manipulate[snowflake[n], {{n, 2}, ControlType -> None},
Style["A Koch snowflake", Bold], Delimiter,
Row[{Button["+", n++], Button["-", n = Max[n - 1, 0]]}]]
Run Code Online (Sandbox Code Playgroud)
这是一个示例,表明即使Button
在单独的函数中定义它也可以:
SetAttributes[paletteButton, HoldRest]
paletteButton[name_, func_] :=
Button[name, func, Appearance -> "Palette"]
Manipulate[snowflake[n], {{n, 2}, ControlType -> None},
Style["A Koch snowflake", Bold], Delimiter,
Evaluate@paletteButton["+", n++]]
Run Code Online (Sandbox Code Playgroud)
正如您在问题中提到的,这里有必要将函数包装起来Evaluate
以获得内联Button
.否则Manipulate
将无法注意到我们这里有的是控件而不是变量.
归档时间: |
|
查看次数: |
939 次 |
最近记录: |