在 TCL/TK 小部件销毁后删除绑定
In TCL/TK Remove binding after widget destruction
我有一个 canvas 位于我的主应用程序的子 window 中:
.dsm.nb.mdlbuild.canvas
另外,我有以下(几个之一)过程帮助我让用户在 canvas 上移动东西:
proc grab { xx yy } {
global currentx currenty
set currentx $xx
set currenty $yy
}
我使用这个绑定:
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> {grab %x %y }
问题:
当用户关闭 window (.dsm) 时,canvas 被破坏,但绑定似乎 'survive'。
当用户随后点击某处时出现错误:
wrong args: should be "grab xx yy"
这是因为 xx 和 yy 是空的,我想是因为 canvas 和父项一起消失了 window...
我试图在 .dsm window 被销毁后将绑定设置为空:
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> { }
并使用 "break" 命令,但没有成功。
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> break
如何在关闭 canvas 所在的 window (.dsm) 后删除绑定,以便此错误消失?
问题很可能是您为您的过程使用了标准 Tk 命令的名称。 grab
命令从 Tk 库中的不同位置调用,但并不总是与您的 proc 的参数数量相匹配。这会导致错误。您可以在收到错误消息后通过转储 $errorInfo 的值来检查这一点。
因此,只需将您的 proc 重命名为 grab
(或任何其他内置命令)以外的名称。
我有一个 canvas 位于我的主应用程序的子 window 中:
.dsm.nb.mdlbuild.canvas
另外,我有以下(几个之一)过程帮助我让用户在 canvas 上移动东西:
proc grab { xx yy } {
global currentx currenty
set currentx $xx
set currenty $yy
}
我使用这个绑定:
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> {grab %x %y }
问题:
当用户关闭 window (.dsm) 时,canvas 被破坏,但绑定似乎 'survive'。
当用户随后点击某处时出现错误:
wrong args: should be "grab xx yy"
这是因为 xx 和 yy 是空的,我想是因为 canvas 和父项一起消失了 window...
我试图在 .dsm window 被销毁后将绑定设置为空:
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> { }
并使用 "break" 命令,但没有成功。
.dsm.nb.mdlbuild.canvas bind $tagtomove <Button-1> break
如何在关闭 canvas 所在的 window (.dsm) 后删除绑定,以便此错误消失?
问题很可能是您为您的过程使用了标准 Tk 命令的名称。 grab
命令从 Tk 库中的不同位置调用,但并不总是与您的 proc 的参数数量相匹配。这会导致错误。您可以在收到错误消息后通过转储 $errorInfo 的值来检查这一点。
因此,只需将您的 proc 重命名为 grab
(或任何其他内置命令)以外的名称。