Mathematica中的鼠标悬停和动态

gde*_*ino 14 wolfram-mathematica mathematica-frontend

任何人都可以指出为什么这在Mathematica 8中不起作用:

DynamicModule[{x = Pink},
 Row[
  {Style["Hello", x],
   Mouseover[
    x = Green; "World",
    x = Blue; "World"]}]]
Run Code Online (Sandbox Code Playgroud)

当我将鼠标移到"世界"时,我期望看到"Hello"的颜色发生变化.我得到的是粉红色的"你好",永远不会改变颜色.

Mr.*_*ard 10

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

DynamicModule[{x = Pink},
 Row[{
   Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
   Annotation["World", 1, "Mouse"]
 }]
]
Run Code Online (Sandbox Code Playgroud)


Sjo*_*ies 9

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

在此输入图像描述


Arn*_*ing 9

尝试使用EventHandler"MouseEntered""MouseExited":

DynamicModule[{c = Pink}, Row[{
 Style["Hello", FontColor -> Dynamic[c]], 
 EventHandler[
  "World", {
   "MouseEntered" :> (c = Blue), 
   "MouseExited" :> (c = Green)
}]}]]
Run Code Online (Sandbox Code Playgroud)


Mik*_*ley 7

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

Mouseover[Print["One"]; 1, Print["Two"]; 2]
Run Code Online (Sandbox Code Playgroud)

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


Hei*_*ike 7

作为替代方案,你可以做类似的事情

DynamicModule[{col = Pink}, 
 Row[{Style["Hello ", FontColor -> Dynamic[col]], 
   Dynamic@If[CurrentValue["MouseOver"],
     col = Green; "World", 
     col = col /. Green -> Blue; "World"]}]
] 
Run Code Online (Sandbox Code Playgroud)