Slider &引用;“上一次下一次”;Mathematica中的按钮而不是滑块?

Slider &引用;“上一次下一次”;Mathematica中的按钮而不是滑块?,slider,controls,wolfram-mathematica,Slider,Controls,Wolfram Mathematica,当受控值为离散值时,是否可以使用一些“上一个下一个”按钮而不是下面示例中的滑块 我发现这个操纵器很难看,如果可能的话,我想要一些Setter类型的 Manipulate[ Graphics[ { Rectangle[{1, 1}, {3, 3}], Circle[{where, 2}, 1] },

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

我发现这个操纵器很难看,如果可能的话,我想要一些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}
          ]

据我所知,如果没有为操纵指定控件,Mathematica将根据给定的值决定使用哪个控件。这通常是操纵器控制,与滑块控制(在您的示例中)不同,可以扩展控制以使用前进/后退、播放功能等。这些可能足够了:

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"}}]
最近的一个问题是,如何从一开始就使用选项显示操纵器的这些离散按钮:
Appearance->Open

编辑: 您还可以指定要显示的离散按钮,例如,使用“单步向左”和“单步向右”按钮

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

您可以使用
按钮创建自己的控件,如下所示:

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]

正如尤达所示,
按钮可以用来操作
中的下一个和上一个按钮。这类按钮通常用于穿过有限范围的对象。在该范围的开始和结束时,应分别禁用“上一步”和“下一步”按钮。要使其正常工作,可以使用按钮属性
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]
votePictures[图片输入]:=
DynamicModule[{pictures=picturesInput,status,i},
状态=表格[“未投票”{长度[图片]}];
i=1;
面板[
划船[
{
动态[显示[图片[[i]],图像大小->256]],间隔[72 0.7],
纵队[
{
行[{Style[“Status”,FontFamily->“Arial Bold”],
塞特伯[
动态[状态[[i]]],{“无响应”、“丑陋”、“漂亮”}]}
], ,
划船[{
按钮[“上一个”,i-=1,启用->(i>1)],
按钮[“下一步”,i+=1,已启用->(i“Arial粗体”],
滑块[动态[i],{1,长度[图片],1},外观->“标记”]
}
], ,
按钮[“保存结果”,(*此处导出代码*)]
}
]//框架
}
],图像大小->750
]
]
pictures=ExampleData[#]&/@ExampleData[“TestImage”]
votePictures[图片]

谢谢。我的问题是,与其他形式的控制相比,我刚刚发现这些都是丑陋的。@500,如果它解决了你的问题,你应该接受这个答案。@Joshua,我允许自己不回答,让其他专家有时间提出他们的解决方案。从我发布的问题和其他问题中,我发现答案并不是多余的,而是符合不同的约束条件。所以,当我觉得这个问题引起了人们的兴趣时,我就把它留了下来。我给自己一两天时间。尤达的答案是我使用的,它将是一个检查。“只有在语法方面你才能更完美。”(威廉·萨菲尔)这是我对这个论坛的思考和尊重的最好总结。然而,在这方面,我很乐意改变我的行为。@Joshua我发现反过来(也就是说,在发帖几秒钟后接受第一个似乎能起作用的答案)更令人恼火。如果这是我们的默认行为,我们就必须像秃鹫一样一直绕圈子,我还有更多的事要做。@Joshua:如果已经有一个公认的答案,很多人都不会费心回答,如果一个答案太仓促,人们可能会错过有经验的人提供更好的答案或补充现有答案的答案。例如,在这个问题上,Sjoerd的回答很好地补充了我的回答,并解释了如何禁用端点的按钮。这是我不知道如何做的事情,它不仅对OP有帮助,而且对我,也许对其他人也有帮助。@yoda你在范围结束时停车的方法可能更简单,但从人为因素的角度来看是不正确的。在给定时间无效的按钮应显示为灰色(取决于操作系统的隐喻),以免混淆用户。这是一种非常常见的设计模式。以我的示例中的Save按钮为例。如果用户在判断所有图片之前无法保存,则按钮不应显示为活动状态。只是一点期望管理。在这里,我选择让这个按钮一直处于活动状态,表示您可以随时保存。对于那些困惑的人:10分钟前,Yoda刚刚发表了一条评论,当a写下上述回复时,该评论消失了。我只是把回答留在这里,以防万一这是个技术问题。@Sjoard:你绝对正确,我只是同意你的看法。我之所以删除,是因为我写的内容不正确,编辑我的评论为时已晚:)@sjoard,我有时间浏览你的代码,我希望很快就能轻松使用dynamic。我相信你应该在wolfram的演示中加入这一点。真的是一个。@500谢谢。wrt演示:我相信我只为其中一个提供了想法,但我还没有提交自己的想法。你指的是哪一个?