Tk 中是否有鼠标悬停在小部件内的回调?

Is there a callback in Tk for mouse hovering inside a widget?

我有一个 Tk window,带有几个小部件,使用户能够 select 几何网格线以重新标注尺寸。其中一个小部件是列表框 selection,其中列出了要重新标注的每条可能的网格线。当鼠标悬停在列表框中的一行上时,我想将该网格线的文本名称的字体更改为 bold,并将命令发回另一个包( Pointwise) 以突出显示 Pointwise 网格生成软件 window 中的线。 Tk 是否提供这样的回调?我看到有一些方法可以检测鼠标何时 "Enters" 和 "Leaves" 是一个小部件,以及是否 select 在小部件内编辑了某些东西,但悬停似乎是一个模糊的结构。有没有类似curselection的功能可以抓取光标悬停的文字?

先从这里开始:

bind . <Motion> {puts [winfo containing {*}[winfo pointerxy .]]}

也就是说,如果鼠标指针在.范围内移动,则打印包含当前鼠标坐标的小部件的路径。

鼠标不移动时没有鼠标事件。当鼠标开始在小部件上移动时有 <Enter> 个事件,当鼠标停止在小部件上移动时有 <Leave> 事件,当鼠标移动到小部件上时有 <Motion> 事件。这意味着您的 GUI 控制器代码需要做一些工作来跟踪正在发生的事情,但这通常不是什么大问题。运动事件有几个相关的替换,但最有用的是 %x%y,因为它们表示鼠标在小部件相对坐标中移动到的位置。

请注意,如果用户在该小部件中单击然后离开,您也会将 <Motion> 事件传送到该小部件;当按下任何鼠标按钮时,会自动 grab 的(与鼠标相关的)事件。这种事情使得在应用程序中进行拖放变得非常简单(您只需使用 winfo containing %X %Y — 这些是大写字母,因此我们使用全局坐标 — 找出鼠标的位置 真的 确定哪个小部件是目标)但是一旦你开始处理所有细节,这是一个相当复杂的话题。