将鼠标按钮绑定到画布上的任何位置,在Tcl Tk中

时间:2011-10-23 15:05:42

标签: canvas tags bind tcl tk

我希望我的画布在画布区域的任何位置单击鼠标按钮时执行操作。我已经能够绑定一个点击,但只有当它在现有对象上进行时才会绑定:

$this/zinc bind all <Button-1> [list select_shape $this]

我尝试使用相同的命令而未指定标记:

$this/zinc bind <Button-1> [list select_shape $this]

它出错了。

通过提供空字符串而不是标记:

$this/zinc bind "" <Button-1> [list select_shape $this]

它的行为就好像我写了all

我提供的tag是什么,以便它可以在画布中的任何位置使用,或者如何避免指定tag

1 个答案:

答案 0 :(得分:4)

画布的bind方法只允许您绑定项目(和应用于项目的标签),然后仅绑定所有Tk事件的子集。如果您想要整个画布的事件 - 或者要检测其他类型的事件 - 请使用全局bind命令:

bind $this/zinc <Button-1> {...}

或者,在所有其他项目下方放置一个完全透明的矩形(-fill-outline都设置为空字符串),并将其用作最后的表面。就像那样,如果没有别的东西拿起点击,那就会。或者您甚至可以将这样一个透明项放在所有内容之上(在这种情况下,它将拦截所有鼠标事件)并以这种方式执行。请注意,矩形(和多边形,当您需要非矩形热区时)是这样的特殊方式:大多数项目在它们看不到的部分中没有响应,但是完全透明的矩形对整个区域都有响应。这有各种有趣的用途

(有时您可以将基础矩形与其他项目组合,例如背景图像项目。)