Events 在Tcl\Tk中检索单击的小部件名称

Events 在Tcl\Tk中检索单击的小部件名称,events,tcl,bind,tk,Events,Tcl,Bind,Tk,我有一个非常大的Tcl/Tk应用程序,其中有很多小部件。为了方便地修改小部件配置,而不必在控制台中按小部件/配置参数键入它,我想为此构建一个对话框。 为此,我需要一个选项来轻松选择要配置的小部件。 我想写一个函数,让用户点击应用程序中的任何小部件(任何对话框)并检索小部件路径。 任何IDE?您可以使用以下方法将全局坐标(例如,从绑定的%X和%Y)转换为小部件名称: bind。{ 设置w[winfo包含%X%Y] 放上“你点击了$w” } 请注意,这可以与其他绑定进行非常显著的交互!您可能需要使

我有一个非常大的Tcl/Tk应用程序,其中有很多小部件。为了方便地修改小部件配置,而不必在控制台中按小部件/配置参数键入它,我想为此构建一个对话框。 为此,我需要一个选项来轻松选择要配置的小部件。 我想写一个函数,让用户点击应用程序中的任何小部件(任何对话框)并检索小部件路径。
任何IDE?

您可以使用以下方法将全局坐标(例如,从
绑定的
%X
%Y
)转换为小部件名称:

bind。{
设置w[winfo包含%X%Y]
放上“你点击了$w”
}
请注意,这可以与其他绑定进行非常显著的交互!您可能需要使用
抓取
(小心;全局抓取可能会导致问题!)进行调查,并配置
-光标
,以便告诉用户发生了什么。这是很有能力的,但一些想法可能是必要的,使它的工作方式,你想要的


(您知道吗,
winfo containing
是大多数拖放处理的核心功能的脚本接口?它完全使用系统将位置映射到windows…

感谢Donal的详细解释。事实上,我知道含有
winfo的
语句,但您准确地指出了我的问题-与另一个绑定的交互…实际上,我现在尝试使用
bind all{set w[winfo contaning%X%Y];put$w}
。根据
bind
手册,如果在同一个小部件上发现多个绑定,则存在优先级,
all
最后执行。我遗漏了什么吗?显然问题是原始绑定被执行了。。。您能帮助我们如何使用
grab
来实现它吗?
bind . <Button-1> {
    set w [winfo containing %X %Y]
    puts "You clicked on $w"
}