Tcl 如何从命令中获取画布小部件名称?

Tcl 如何从命令中获取画布小部件名称?,tcl,tk,Tcl,Tk,我尝试创建弹出菜单,部分由打开它的小部件定义。我似乎找不到一种方法来找到菜单是在哪个小部件上打开的。例如: .f.canvas bind all <3> { puts stderr "%W just gives me '.f.canvas'" } 小部件名称将用于在另一个表中查找,以更改与特定小部件相关的对象的属性。尝试 .f.canvas bind all <3> { puts stderr [%W find closest %x %y] } 它应该显示

我尝试创建弹出菜单,部分由打开它的小部件定义。我似乎找不到一种方法来找到菜单是在哪个小部件上打开的。例如:

.f.canvas bind all <3> {
  puts stderr "%W just gives me '.f.canvas'"
}
小部件名称将用于在另一个表中查找,以更改与特定小部件相关的对象的属性。

尝试

.f.canvas bind all <3> {
    puts stderr [%W find closest %x %y]
}

它应该显示您单击的项目的id。

在我遇到的画布Tk文档中查找其他内容时:

标签电流由Tk自动管理;它适用于 当前项,它是绘制区域覆盖 鼠标光标的位置不同的项目类型对此进行了解释 不同的方式;有关详细信息,请参阅单个项目类型文档。 如果鼠标不在画布小部件中或不在项目上方,则 没有项目具有当前标记

使用它的示例:

.f.canvas bind all <3> {
  puts stderr "widget [%W find withtag current] says hello"
}

画布的绑定小部件命令应用于画布中的项目。正如您所发现的,画布窗口名称是固定的。你需要提供更多的代码和信息来说明你要做什么。如果他使用滚动,可能需要使用canvasx和canvasy方法来转换坐标。