Wolfram mathematica 鼠标盖&;数学中的动力学

Wolfram mathematica 鼠标盖&;数学中的动力学,wolfram-mathematica,mathematica-frontend,Wolfram Mathematica,Mathematica Frontend,有谁能指出为什么这在Mathematica 8中不起作用: 我所期望的是,当我将鼠标移到“世界”上时,“你好”的颜色会发生变化。我得到的是一个永远不会改变颜色的粉红色“Hello”。如果你查看结果的完整形式,你会发现它只包含每个复合指令集的最后一部分。显然,Mouseover会计算其参数,并且只存储结果 快速检查显示,Mouseover在您第一次启动它时计算它内部的所有表达式: Mouseover[Print["One"]; 1, Print["Two"]; 2] 实际使用Mouseover修

有谁能指出为什么这在Mathematica 8中不起作用:


我所期望的是,当我将鼠标移到“世界”上时,“你好”的颜色会发生变化。我得到的是一个永远不会改变颜色的粉红色“Hello”。

如果你查看结果的完整形式,你会发现它只包含每个复合指令集的最后一部分。显然,Mouseover会计算其参数,并且只存储结果


快速检查显示,
Mouseover
在您第一次启动它时计算它内部的所有表达式:

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

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

作为替代方案,您可以执行以下操作

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

我想我已经等得够久了。以下是我的建议:

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

尝试将
EventHandler
“MouseEntered”
“MouseExited”
一起使用:


我认为这不起作用的原因是
MouseOver
只对
x=…
表达式求值一次。我不知道如何才能达到你想要的行为。哇,我从你们所有人那里得到了非常好的答案。我投票支持你们所有人。选择答案真的很难。Sjoerd和Mike很好地解释了为什么我的代码无法工作,这就是我所问的。海克、巫师先生和阿诺德提出了如何解决这个问题,这正是我真正想问的。谢谢大家!!有趣。您不使用此方法实现该示例有什么原因吗?@Mr.Wizard——您的意思是为什么Mouseover的行为与上面的EventHandler不一样?我必须检查一下。不,我认为迈克的回答很好地说明了鼠标的行为。我的意思是,您没有使用此方法来编写代码以产生我的方法所产生的结果,这就是我相信OP试图实现的结果,这是有原因的吗?我认为它更能说明
EventHandler
的行为。但我改变了它,使其与原来的示例一样。@Mr.Wizard——是的,这在V8中是新的(但现在我看到它,显然没有在EventHandler中记录下来)。@Mr.Wizard:是的,我知道。我后来意识到了这一点,但我希望在我有机会修复它之前没有人会注意到这一点(我现在已经有了)。我本应该早点回答的,但在发布我的答案后,我几乎必须立即离开。这是最优雅的解决方案。@Mike如果这个问题是我的,我会接受你的答案。它非常简洁,非常清晰。这个“答案”根本没有解决OP的问题;很可能他在问之前就知道这样的方法,并且只对
Mouseover
的行为感兴趣。
DynamicModule[{x = Pink},
 Row[{
   Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
   Annotation["World", 1, "Mouse"]
 }]
]
DynamicModule[{c = Pink}, Row[{
 Style["Hello", FontColor -> Dynamic[c]], 
 EventHandler[
  "World", {
   "MouseEntered" :> (c = Blue), 
   "MouseExited" :> (c = Green)
}]}]]