我希望我的画布在画布区域的任何位置单击鼠标按钮时执行操作。我已经能够绑定一个点击,但只有当它在现有对象上进行时才会绑定:
$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
?
答案 0 :(得分:4)
画布的bind
方法只允许您绑定项目(和应用于项目的标签),然后仅绑定所有Tk事件的子集。如果您想要整个画布的事件 - 或者要检测其他类型的事件 - 请使用全局bind
命令:
bind $this/zinc <Button-1> {...}
或者,在所有其他项目下方放置一个完全透明的矩形(-fill
和-outline
都设置为空字符串),并将其用作最后的表面。就像那样,如果没有别的东西拿起点击,那就会。或者您甚至可以将这样一个透明项放在所有内容之上(在这种情况下,它将拦截所有鼠标事件)并以这种方式执行。请注意,矩形(和多边形,当您需要非矩形热区时)是这样的特殊方式:大多数项目在它们看不到的部分中没有响应,但是完全透明的矩形对整个区域都有响应。这有各种有趣的用途。
(有时您可以将基础矩形与其他项目组合,例如背景图像项目。)