gpt4 book ai didi

wolfram-mathematica - 如何在 Mathematica 中制作选择性下拉菜单?

转载 作者:行者123 更新时间:2023-12-04 08:15:39 24 4
gpt4 key购买 nike

我的 Manipulate 界面空间不足。所以,我想看看我是否可以重载一个 PopupMenu 来满足多个目的。

这是问题所在:

我有一个 PopupMenu 用于从中选择一个条目。但是根据我在其他地方做出的另一个选择,菜单中的某些条目将不再有意义。

所以,我想知道,是否可以根据 Dynamic 的设置使 PopupMenu 中的某些条目“可选”? (可能被禁用,或变灰,或者最好是动态地让整个列表本身,即整个弹出菜单是动态的,所以我可以根据另一个动态的值选择不同的菜单。但我不这么认为是可能的)

当前,可以根据动态设置启用或禁用 WHOLE PopupMenu。但我想在 Popupmenu 内的入门级执行此操作。

下面是一个例子来说明:

Manipulate[selection,
Grid[{
{"x", SetterBar[Dynamic[x], {1, 2}]},
{"selection", PopupMenu[Dynamic[selection],
{
"NONE", "SOR", "SSOR"
}, Enabled -> Dynamic[x == 1]], SpanFromLeft
}
}]
]

enter image description here

在上面,当 X=1 时,整个菜单被启用。

但是我想要的是,如果 X=1,则只能选择说“NONE”(或列表只显示“NONE”),而当 X=2 时,则只能选择“SOR”和“SSOR” "(或列表仅显示这 2 个选项)。

即,如果 x=2,系统将不会选择“SOR”。尝试选择它不会导致任何更改,并且菜单将保留其先前的设置并且不会更改。

再说一次,我知道我可以把东西分成 2 个 popuMenus,并根据下面这样的 X 设置来控制每个,但我没有更多空间来添加更多菜单:
Manipulate[If[x == 1, selectionA, selectionB],
Grid[{
{"x", SetterBar[Dynamic[x], {1, 2}]},
{"selection", PopupMenu[Dynamic[selectionA],
{
"NONE"
}, Enabled -> Dynamic[x == 1]], SpanFromLeft
},
{"selection", PopupMenu[Dynamic[selectionB],
{
"SOR", "SSOR"
}, Enabled -> Dynamic[x == 2]], SpanFromLeft
}
}]
]

enter image description here

我的问题是:有没有办法在 Mathematica 中执行上述操作?我正在使用 8.04。

最好的解决方案是让菜单本身的项目列表通过动态(或整个菜单是动态的),所以我可以告诉它在 X=1 时使用 listA 或在 X=2 时使用 listB,等等。但我不知道如何做到这一点,甚至不知道它是否可能。

附:这是我目前对解决方案的尝试
Manipulate[selection,

Grid[{
{"x", SetterBar[Dynamic[x], {1, 2}]},
{"selection", PopupMenu[Dynamic[selection],
{
Dynamic[If[x == 1, listA, listB]]
}
]
}
}
],
Initialization :>
(
listA = {"A", "B"};
listB = {"C", "D"};
)
]

但它的效果还不是很好。会坚持下去的......

谢谢

更新:

看看下面的西蒙解决方案给了我更多启发,所以这就是我目前所拥有的:
Manipulate[selection,

Grid[{
{"x", SetterBar[Dynamic[x], {1, 2}]},
{"selection",

Dynamic[If[x == 1,
(
selection = "A";
PopupMenu[Dynamic[selection], {"A", "B"}]
),
(
selection = "C";
PopupMenu[Dynamic[selection], {"C", "D"}]
)
]
]
}
}
]
]

enter image description here

最佳答案

这是您正在寻找的类型吗?

Manipulate[
Switch[x,
1, If[selection =!= None, selection = None],
2, If[selection === None, selection = "SOR"]];
selection,
{x, {1, 2}, ControlType -> SetterBar},
{{selection, None}, Switch[x, 1, {None}, 2, {"SOR", "SSOR"}, _, {"huh"}],
ControlType -> PopupMenu}]

请注意 Switch在顶部控制 selection 的默认值当 x被改变。

编辑:

按照您的要求将菜单逻辑本地化到控件 Grid并窃取了 Heike 的默认机制,这是一个新版本:
Manipulate[selection,
Grid[With[{menu = {{None}, {"A", "B"}, {"emu", "num"}}},
{{"Which menu?", SetterBar[Dynamic[x], Range[Length[menu]]]},
{"Menu selection:", Dynamic[
If[MemberQ[menu[[x]], selection], selection = menu[[x, 1]]];
PopupMenu[Dynamic[selection], menu[[x]]]]}}]],
{{selection, None}, None}, {{x, 1}, None}]

a boring screenshot

请注意 menu列表不需要用 With 本地化语句 - 它可以在代码的其他地方设置。

关于wolfram-mathematica - 如何在 Mathematica 中制作选择性下拉菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com