EventHandler[expr,{"event1":>action1,"event2":>action2,…}]
显示为 expr,只要连接到 expr 的 "eventi" 发生时,运行 actioni.
EventHandler
EventHandler[expr,{"event1":>action1,"event2":>action2,…}]
显示为 expr,只要连接到 expr 的 "eventi" 发生时,运行 actioni.
更多信息和选项
- 标准与鼠标相关事件包括:
-
"MouseClicked" 按下鼠标不动 {"MouseClicked",i} 按下鼠标第 i 按钮不动 "MouseDown" 按下鼠标主按钮 {"MouseDown",i} 按下鼠标第 i 按钮 "MouseDragged" 按下鼠标主按钮,鼠标移动 {"MouseDragged",i} 按下鼠标第 i 按钮,鼠标移动 "MouseMoved" 鼠标在 expr 定义的区域内移动 "MouseUp" 释放鼠标主按钮 {"MouseUp",i} 释放鼠标第 i 个按钮 - 对于鼠标事件,EventHandler[expr, …] 处理 expr 定义的矩形区域内的鼠标事件.
- 标准与键盘相关事件包括:
-
"KeyDown" 按下键盘上的任意键 {"KeyDown","x"} 按下 x 键 "ReturnKeyDown" 按下
或
键"EscapeKeyDown" 按下
键"LeftArrowKeyDown" 按下左箭头键 "RightArrowKeyDown" 按下右箭头键 "UpArrowKeyDown" 按下上箭头键 "DownArrowKeyDown" 按下下箭头键 - 标准界面事件包括:
-
{"MenuCommand","name"} 带有选择名称的菜单命令 "WindowClose" 关闭需要的窗口 - 如果诸如 MousePosition 或 CurrentValue 的函数在特定 actioni 中进行计算,它们给出的值是 actioni 触发了事件相关的值.
- 当 EventHandler 表达式嵌套时,事件默认由所有表达式共享,最内层表达式首先运行事件.
- 可以给出以下可选项:
-
Method "Preemptive" 使用的计算方法 PassEventsDown Automatic 是否把事件传送给内部事件处理程序 PassEventsUp True 是否把事件传送给外部事件处理程序 - Method 选项的典型可能设置包括 "Preemptive" 和 "Queued".
- 在 PassEventsDown->Automatic 缺省设置情况下,EventHandler 处理的事件也不会传送给 Wolfram 系统前端的内在事件处理程序.
范例
打开所有单元 关闭所有单元基本范例 (2)
DynamicModule[{col = Green}, EventHandler[Style["text", FontColor -> Dynamic[col]], {"MouseClicked" :> (col = Red)}]]DynamicModule[{col = Green}, EventHandler[Style["text", FontColor -> Dynamic[col]], {"MouseClicked" :> (col = col /. {Red -> Green, Green -> Red})}]]范围 (1)
DynamicModule[{col = Green}, EventHandler[Dynamic[Graphics[{col, Disk[]}, ImageSize -> Tiny]], {"MouseClicked" :> (col = col /. {Red -> Green, Green -> Red})}]]DynamicModule[{col = Green}, EventHandler[Dynamic[Graphics[{col, Disk[]}, ImageSize -> Tiny]], {"MouseDown" :> (col = col /. {Red -> Green, Green -> Red}),
"MouseUp" :> (col = col /. {Red -> Green, Green -> Red})}]]选项 (5)
Method (1)
DynamicModule[{a = "start"}, {EventHandler[Panel["does time out"], "MouseClicked" :> (Pause[6];a = "end")], Dynamic[a]}]使用 Method->"Queued" 在主链接上计算按钮函数,从不超时:
DynamicModule[{a = "start"}, {EventHandler[Panel["does not time out"], "MouseClicked" :> (Pause[6];a = "end"), Method -> "Queued"], Dynamic[a]}]PassEventsDown (2)
DynamicModule[{p = {0, 0}, c = Green}, EventHandler[EventHandler[Framed@Dynamic[Graphics[{c, Disk[p, 0.2]}, PlotRange -> 2]], {"MouseDown" :> (c = c /. {Red -> Green, Green -> Red})}], {"MouseDown" :> (p = MousePosition["Graphics"])}, PassEventsDown -> True]]DynamicModule[{p = {0, 0}, c = Green}, EventHandler[EventHandler[Framed@Dynamic[Graphics[{c, Disk[p, 0.2]}, PlotRange -> 2]], {"MouseDown" :> (c = c /. {Red -> Green, Green -> Red})}], {"MouseDown" :> (p = MousePosition["Graphics"])}, PassEventsDown -> False]]PassEventsUp (2)
默认情况下,在指定的行为下,嵌套的 EventHandler 行为被触发:
DynamicModule[{i = 1, j = 1}, Style[EventHandler[Framed@{Dynamic[i], EventHandler[Framed[Dynamic[j]], "MouseDown" :> ++j]}, "MouseDown" :> ++i], 36]]通过禁用 PassEventsUp,防止外层的 EventHandler 行为被触发:
DynamicModule[{i = 1, j = 1}, Style[EventHandler[Framed@{Dynamic[i], EventHandler[Framed[Dynamic[j]], "MouseDown" :> ++j, PassEventsUp -> False]}, "MouseDown" :> ++i], 36]]当
键被按下时,允许外层的 EventHandler 行为:
DynamicModule[{i = 1, j = 1}, Style[EventHandler[Framed@{Dynamic[i], EventHandler[Framed[Dynamic[j]], "MouseDown" :> ++j, PassEventsUp :> CurrentValue["ShiftKey"]]}, "MouseDown" :> ++i], 36]]应用 (2)
lineFit[points_, {{xmin_, xmax_}, {ymin_, ymax_}}] := Module[{x, lf}, lf = Function@@{{x}, Fit[points, {x, 1}, {x}]};
Line[{{xmin, lf[xmin]}, {xmax, lf[xmax]}}]];DynamicModule[{p = {}, l = {}},
EventHandler[Dynamic@Graphics[{Point[p], l}, PlotRange -> 1, Frame -> True], "MouseDown" :> (AppendTo[p, MousePosition["Graphics"]];
If[Length[p] ≥ 2, l = lineFit[p, {{-1, 1}, {-1, 1}}]])]]interpolationCurve[p_, n_] := Module[{f = Interpolation[p, InterpolationOrder -> n ]}, First@Plot[Evaluate@f[x], {x, Min[p[[All, 1]]], Max[p[[All, 1]]]}]];DynamicModule[{n = 2, p = {}, c = {}},
EventHandler[Dynamic@Graphics[{Point[p], c}, PlotRange -> 1, Frame -> True],
"MouseDown" :>
(p = Union[Sort@Append[p, MousePosition["Graphics"]], SameTest -> (First[#1] == First[#2]&)];
If[Length[p] ≥ n + 1, c = interpolationCurve[p, n]])]]属性和关系 (1)
EventHandler 可以和 MousePosition 连用:
DynamicModule[{pos = {0, 0}}, EventHandler[Framed@Graphics[{Disk[Dynamic[pos], 0.2]}, PlotRange -> 2], {"MouseDown" :> (pos = MousePosition["Graphics"])}]]巧妙范例 (4)
单击将点添加到 BSplineCurve:
DynamicModule[{pts = {}, down = False},
EventHandler[
Graphics[{Thickness[.03], Red,
BSplineCurve[Dynamic[pts]]}, PlotRange -> 1, Frame -> True, FrameTicks -> False],
{"MouseDown" :> (AppendTo[pts, MousePosition["Graphics"]];
down = True), "MouseMoved" :> If[down, AppendTo[pts,
MousePosition["Graphics"]]], "MouseUp" :> (down = False)}]]Graphics3D[DynamicModule[{b = False}, EventHandler[Cone[Dynamic[{{4, 4, 0}, {4, 4, If[b, -2, 2]}}]], {"MouseDown" :> (b = !b)}]], PlotRange -> {Automatic, Automatic, {-2, 2}}]DynamicModule[{f = Identity}, (EventHandler[Dynamic[Row[f[#1]& /@ Range[15], ","]], {"MouseEntered" :> (f = Function[{y}, If[PrimeQ[y], Style[y, Red], y]]), "MouseExited" :> (f = Identity)}])]DynamicModule[{obj = {}, x},
EventHandler[
EventHandler[Dynamic[If[x < 1, x = x + .01];Graphics[{obj, Orange, Disk[{0, 0}, .2]}, PlotRange -> 1]], {"MouseClicked" :> (obj = {Dynamic[Table[{Circle[{0, 0}, n Dynamic[x]]}, {n, 3}]]};Beep[])}], {"MouseDown" :> (x = 0)}, PassEventsDown -> False]]相关指南
-
▪
- 底层接口控制 ▪
- 控件对象 ▪
- 点击 - 互动式面板 ▪
- 构建用户界面 ▪
- 独立界面 ▪
- 笔记本编辑与界面设定 ▪
- 图的可视化 ▪
- 图形交互和绘制 ▪
- 图的样式、标记和布局
文本
Wolfram Research (2007),EventHandler,Wolfram 语言函数,https://reference.wolfram.com/language/ref/EventHandler.html (更新于 2008 年).
CMS
Wolfram 语言. 2007. "EventHandler." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2008. https://reference.wolfram.com/language/ref/EventHandler.html.
APA
Wolfram 语言. (2007). EventHandler. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/EventHandler.html 年
BibTeX
@misc{reference.wolfram_2026_eventhandler, author="Wolfram Research", title="{EventHandler}", year="2008", howpublished="\url{https://reference.wolfram.com/language/ref/EventHandler.html}", note=[Accessed: 05-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_eventhandler, organization={Wolfram Research}, title={EventHandler}, year={2008}, url={https://reference.wolfram.com/language/ref/EventHandler.html}, note=[Accessed: 05-September-2026]}