我的经验是定位器非常适合它们的本质,但试图概括它们并不能很好地发挥作用。幸运的是,您想要做的仍然非常简单。
clickFunction[point,moreargs]:=Module[{}, see below ];
DynamicModule[{},
ClickPane[
Dynamic[Show[ what you want to click on ]],
clickFunction[#,moreargs]
]
]
当用户在窗格中单击时,将使用鼠标指针的坐标和可能的其他参数调用 clickFunction。您可以将 Dynamic[] 放置在 click 函数调用中的各个参数周围(在 DynamicModule 的第一个参数中添加符号,使它们成为动态的)。clickFunction 也可以返回值,使用形式
({v1,v2,v3,..}=clickFunction[#,moreargs])&
返回值列表中的符号可以是动态的,但不应具有动态包装器。
clickFunction 需要弄清楚点击了什么。对于单击窗格上的每个区域(假设它是矩形),使用其左下角和右上角创建 x 和 y 不等式,当点参数位于或超出矩形时返回 true 或 false。您可以将它们保存在一个列表中,您可以使用适当的函数遍历该列表以检测单击的内容。
不要回避 Dynamic[]。我试图用 Manipulate[] (和定位器)做事情太久了,认为 Dynamic[] 是一个很大的学习曲线。它不是。