如何检测按下的鼠标何时进入不同框架中的小部件

Posted

技术标签:

【中文标题】如何检测按下的鼠标何时进入不同框架中的小部件【英文标题】:How to detect when a pressed mouse enters a widget in a different Frame 【发布时间】:2014-02-03 14:14:59 【问题描述】:

我有一个 ttk Treeview(在 Tk 的框架中)和一个 tk 列表框(在顶层)。我的意图是执行以下操作:

    在树形视图中按鼠标按钮 1 将(按下的)鼠标移到列表框上 鼠标进入时将焦点设置到包含列表框的顶层

现在我可以在未按下的鼠标进入时设置 Toplevel 的焦点。我用.bind("<Enter>")

当我使用.bind("<B1-Motion>") 时,我可以检测到按下鼠标的移动。但前提是我在列表中按下鼠标。

当我使用.bind("<B1-Enter>")时,我没有收到任何事件。

如何检测其他地方按下的鼠标是否进入了我的列表框?

【问题讨论】:

【参考方案1】:

您需要在<B1-Motion> 上设置绑定。然后,在回调中,您可以使用winfo_containing 方法来确定光标下的小部件。您可以使用event.x_rootevent.y_root 作为winfo_containing 的参数来查找小部件:

self.bind_all("<B1-Motion>", self.on_motion)
...
def on_motion(self, event):
    widget = self.winfo_containing(event.x_root, event.y_root)
    ...

【讨论】:

非常非常感谢!顺便说一句...在搜索 tk GUI 的东西之后,总是你给出了完美的答案:)。 有没有办法只获得class 或主小部件?喜欢.!enter 只是为了获取.,即root 或tasks.!label1 获取tasks @CoolCloud:winfo_* 命令可以为您提供所需的信息。 winfo_parentwinfo_class

以上是关于如何检测按下的鼠标何时进入不同框架中的小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过拖放获取鼠标下QLayout中的小部件?

当鼠标悬停而不是 pyFLTK 中的小部件时如何调用函数?

如何在 FLTK 中对两个不同的小部件同时使用键盘箭头和鼠标单击?

如何在 Qt 层次结构的根小部件中获取鼠标按下事件

PyQt 将鼠标按下的坐标映射到图像的坐标系

如何使用 mousepressEvent 打开一个新的小部件