Wolfram mathematica Mathematica中操纵[]的自定义控制器
我已经创建了一个函数测试[],如果需要的话,它也可以是一个符号测试,我正试图在一个控制台中实现它。test[]如下所示:Wolfram mathematica Mathematica中操纵[]的自定义控制器,wolfram-mathematica,Wolfram Mathematica,我已经创建了一个函数测试[],如果需要的话,它也可以是一个符号测试,我正试图在一个控制台中实现它。test[]如下所示: test[]:=Button["Label",Functionality[]]; 如果直接在操纵[]中使用,则会返回错误,但如果将其包装在动态或求值中,则会返回错误 Manipulate[content,test[]]; Operate::vsform:Operate参数测试[]没有变量规范的正确形式 这个有效 Manipulate[content,Evaluate[te
test[]:=Button["Label",Functionality[]];
如果直接在操纵[]中使用,则会返回错误,但如果将其包装在动态或求值中,则会返回错误
Manipulate[content,test[]];
Operate::vsform:Operate参数测试[]没有变量规范的正确形式
这个有效
Manipulate[content,Evaluate[test]]
请注意,虽然这样做有效,但test不是一个函数
Manipulate[content,Evaluate[test[]]]
这在我的mac电脑上工作,但在我的工作电脑上不工作
我认为这个问题与操纵HoldAll有关,但我不明白为什么Dynamic[]应该解决这个问题。此外,Evaluate[]只在部分时间有效
那么,为什么需要动态[]或求值[]?查看“高级操纵”教程的“自定义控制器”部分,我看不到对此问题的任何引用,在其他地方也找不到任何引用。您可以内联
按钮,而不是使用单独的测试[]
函数。否则,上一个示例,操纵[content,Evaluate[test[]]]
,在Mathematica 8中显示了我的机器上的按钮。平台(Windows或Mac)之间应该没有区别
如果您所做的操作与操作
默认提供的操作完全不同,您可能会发现使用动态
从头开始构建它更方便(这是我通常做的)
下面是一个如何将一些按钮包含为控制器的示例
首先,设置要在操作中显示的内容:
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]}]
然后设置操作
本身:
Manipulate[snowflake[n], {{n, 2}, ControlType -> None},
Style["A Koch snowflake", Bold], Delimiter,
Row[{Button["+", n++], Button["-", n = Max[n - 1, 0]]}]]
下面的示例显示,即使在一个单独的函数中定义了按钮
,此功能仍有效:
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++]]
正如您在问题中提到的,这里需要将函数包装在Evaluate
中,以获得内联按钮。否则,操纵
将无法注意到我们这里的是一个控件而不是一个变量。您能否发布完整的、自包含的工作代码,以便复制和粘贴?包括所有的定义吗?举一个小例子说明问题所在。从这里到那里显示一行,带有未定义的符号,这很难帮助您。我看不出你所说的对你有什么实际作用。但是您没有显示完整的代码,因此可能还有其他问题。
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++]]