鼠标悬停& Mathematica中的动态

时间:2011-11-29 22:32:23

标签: wolfram-mathematica mathematica-frontend

有人能指出为什么这不适用于 Mathematica 8:

DynamicModule[{x = Pink},
 Row[
  {Style["Hello", x],
   Mouseover[
    x = Green; "World",
    x = Blue; "World"]}]]

我期望看到" Hello"的颜色。当我鼠标移动时改变#34; World"。我得到的是粉红色"你好"永远不会改变颜色。

5 个答案:

答案 0 :(得分:10)

我想我已经等了很久才公平。这是我的建议:

DynamicModule[{x = Pink},
 Row[{
   Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
   Annotation["World", 1, "Mouse"]
 }]
]

答案 1 :(得分:9)

如果你查看结果的FullForm,你会发现它只包含每个复合指令集的最后一部分。显然,Mouseover会评估其参数并仅存储结果。

enter image description here

答案 2 :(得分:9)

尝试将EventHandler"MouseEntered""MouseExited"

一起使用
DynamicModule[{c = Pink}, Row[{
 Style["Hello", FontColor -> Dynamic[c]], 
 EventHandler[
  "World", {
   "MouseEntered" :> (c = Blue), 
   "MouseExited" :> (c = Green)
}]}]]

答案 3 :(得分:7)

快速检查显示Mouseover在您首次启动时评估其中的所有表达式:

Mouseover[Print["One"]; 1, Print["Two"]; 2]

实际使Mouseover修改x值的惯用方法是使用MouseAnnotation。 Wizard先生的回答描述了如何实现这一目标。

答案 4 :(得分:7)

作为替代方案,您可以执行类似

的操作
DynamicModule[{col = Pink}, 
 Row[{Style["Hello ", FontColor -> Dynamic[col]], 
   Dynamic@If[CurrentValue["MouseOver"],
     col = Green; "World", 
     col = col /. Green -> Blue; "World"]}]
]