是否可以使用一些“上一个下一个”按钮而不是一个滑块,如下例当受控值是离散时?
我发现机器人非常难看,如果可能的话,我想要一些类型的Setter。
Manipulate[
Graphics[
{
Rectangle[{1, 1}, {3, 3}],
Circle[{where, 2}, 1]
},
PlotRange -> {{0, 11}, {0, 3}}, ImageSize -> {300, 60}
],
{where, 1, 10, 1, Slider}
]
答案 0 :(得分:5)
您可以使用Button
创建自己的控件,如下所示:
Manipulate[
Graphics[
{Rectangle[{1, 1}, {3, 3}],
Circle[{where, 2}, 1]},
PlotRange -> {{0, 11}, {0, 3}},
ImageSize -> {300, 60}
],
{{where, 1, ""},
Button["Prev", where = Max[1, where - 1], Appearance -> "Palette",
ImageSize -> {50, Automatic}] &},
{{where, 1, ""},
Button["Next", where = Min[10, where + 1], Appearance -> "Palette",
ImageSize -> {50, Automatic}] &},
ControlPlacement -> Left]
答案 1 :(得分:4)
据我所知,如果没有为Manipulate指定控件,那么Mathematica将根据给定的值决定使用什么控件。这通常是操纵器控件,它与Slider控件(在您的示例中)不同,因为可以扩展控件以使用前进/后退,播放功能等。这些可能就足够了:
Manipulate[
Graphics[{Rectangle[{1, 1}, {3, 3}], Circle[{where, 2}, 1]},
PlotRange -> {{0, 11}, {0, 3}}, ImageSize -> {300, 60}], {where, 1,
10, 1, Manipulator, Appearance -> "Open",
AppearanceElements -> {"StepLeftButton", "StepRightButton"}}]
最近关于SO的问题解决了如何使用选项从一开始就为机器人显示这些离散按钮:Appearance-> Open
How to show the animation control by default
编辑: 您还可以指定要显示的离散按钮,例如只需使用步骤左右按钮
AppearanceElements -> {"StepLeftButton", "StepRightButton"}
我添加到上面的代码示例中。
实际上,更好更简单的选择是使用触发器控件来隐藏滑块。
Manipulate[
Graphics[{Rectangle[{1, 1}, {3, 3}], Circle[{where, 2}, 1]},
PlotRange -> {{0, 11}, {0, 3}}, ImageSize -> {300, 60}], {where, 1,
10, 1, ControlType -> Trigger,
AppearanceElements -> {"StepLeftButton", "StepRightButton"}}]
答案 2 :(得分:3)
正如Yoda所示,Button
可用于Manipulate
中的 Next 和 Previous 按钮。这种按钮通常用于通过有限范围的物体。在此范围的开头和结尾,应分别禁用“上一个”和“下一个”按钮。要使其生效,可以使用按钮属性Enabled
,并且由于其操作取决于交互式更改的值,因此需要Dynamic
。以下玩具示例显示了其工作原理。
示例代码:
votePictures[picturesInput_] :=
DynamicModule[{pictures = picturesInput, status, i},
status = Table["Not Voted", {Length[pictures]}];
i = 1;
Panel[
Row[
{
Dynamic[Show[pictures[[i]], ImageSize -> 256]], Spacer[72 0.7],
Column[
{
Row[{Style["Status ", FontFamily -> "Arial-Bold"],
SetterBar[
Dynamic[status[[i]]], {"No response", "Ugly", "Nice"}]}
], , ,
Row[{
Button["Previous", i -= 1, Enabled -> (i > 1)],
Button["Next", i += 1, Enabled -> (i < Length[pictures])]}
] // Dynamic,
Row[
{
Style["Picture ", FontFamily -> "Arial-Bold"],
Slider[Dynamic[i], {1, Length[pictures], 1},Appearance -> "Labeled"]
}
], , ,
Button["Save results", (*Export code here *)]
}
] // Framed
}
], ImageSize -> 750
]
]
pictures = ExampleData[#] & /@ ExampleData["TestImage"]
votePictures[pictures]