使用Tkinter实现鼠标悬停弹出窗口
我在一个Python应用程序中使用Tkinter的菜单组件实现了一个信息弹出窗口。我在主窗口的画布上放了一个文本框。我创建了一个菜单组件,它的父级是主窗口。当我检测到鼠标悬停在文本框上时,我就用menuWidget.post()显示这个弹出菜单。当我从文本框中移开鼠标时,我本来想通过调用menuWidget.unpost()让弹出菜单消失,但实际上这个菜单直到我在文本框外点击其他地方才会消失。
首先,这种实现信息弹出窗口的方法合理吗?还有谁能告诉我为什么弹出菜单不会消失吗?
1 个回答
3
这样做信息弹窗是不对的。在Mac和Windows电脑上,菜单是系统自带的控件。所以,unpost
命令不起作用,因为tk会把控制权交给系统的事件循环,以便实现特定平台的行为。
你应该使用一个顶层窗口,并设置overrideredirect
标志。这样你就可以在任何地方显示一个没有边框的窗口。这样做的好处是,你不仅限于简单的文本——你可以在这个顶层窗口里放任何你想要的东西,比如另一个文本框、画布、按钮等等。