【问题标题】:Binding a mouse button click to anywhere on the Canvas, in Tcl Tk在 Tcl Tk 中将鼠标按钮单击绑定到画布上的任意位置
【发布时间】:2011-10-23 15:05:41
【问题描述】:

我希望我的画布在画布区域上的任意位置单击鼠标按钮时执行一个动作。我已经能够绑定点击,但仅限于在现有对象上进行:

$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

【问题讨论】:

    标签: canvas tags bind tcl tk


    【解决方案1】:

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

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

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

    (有时您可以将底层矩形与另一个项目组合,例如背景图像项目。)

    【讨论】:

    • 我不知道这个建议在多大程度上也适用于类似 Zinc 帆布,但它可能相当不错。画布事件模型非常合理,在 Tk 编码器中也比较知名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多