“上一个 - 下一个”按钮而不是Mathematica中的Slider?

时间:2011-06-12 15:15:13

标签: slider controls wolfram-mathematica

是否可以使用一些“上一个下一个”按钮而不是一个滑块,如下例当受控值是离散时?

我发现机器人非常难看,如果可能的话,我想要一些类型的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}
          ]

enter image description here

3 个答案:

答案 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]

enter image description here

答案 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"}}]

enter image description here

答案 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]

enter image description here