如何在Tcl中为右键点击事件绑定proc并修正立即执行问题
问题解决思路及修改方案
你的代码问题核心出在bind命令的参数处理上:
- 当你写
bind . <Button-1> [kuser]时,[kuser]会被Tcl立即执行(所以直接输出AAA),然后把执行结果(空字符串)绑定到点击事件,完全不符合你需要点击后触发的逻辑。 - 另外,Tcl中右键对应的事件是
<Button-3>(Button-1为左键,Button-2为中键),你需要把绑定事件改成这个。
修改后的代码如下:
proc Kuser {} { echo "AAA" } proc getxy_of_mouse_pointer {} { gui_mouse_tool -window Layout.1 -start POINT_DEFINITION_TOOL # 绑定右键点击事件,用花括号包裹脚本避免立即执行 bind . <Button-3> {Kuser} echo "Hello" }
关键修改说明:
- 事件替换:将
<Button-1>改为<Button-3>,对应右键点击触发。 - 脚本包裹:把
[kuser]替换为{Kuser},花括号会让Tcl把内容当作待触发的脚本字符串,只有当右键点击事件发生时,才会调用Kuser过程。
修改后执行getxy_of_mouse_pointer时会先输出Hello,之后只有右键点击窗口时,才会执行Kuser并输出AAA。
内容的提问来源于stack exchange,提问作者Cha Cha
相关产品推荐
相关产品推荐

