首页 > 解决方案 > tkinter optionmenu 关闭事件

问题描述

我正在尝试在 tkinter 中显示选项菜单项的工具提示。我已经想出了如何做到这一点。我留下的问题是关闭工具提示(顶层)窗口。当用户选择一个选项或在选项菜单之外单击(关闭选项菜单的菜单)时,我想这样做。进入和离开事件似乎没有起到作用。任何帮助,将不胜感激!

编辑:我已经添加了一些关于我尝试过的代码。每当我将鼠标悬停在菜单项 1(这是我想要的)上时,就会发生“测试”打印,但我想在用户打开或关闭整个菜单时触发进入和离开事件。我尝试将它们绑定到选项菜单,但它不可靠,有时会在不应该触发时触发离开事件。

from tkinter import Tk, Frame, BOTH, Menu, Label, SUNKEN, X, BOTTOM
import tkinter as tk

class Application(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, background = "white")
        self.parent = parent
        vals = ["1","2","3"]
        var = tk.StringVar()
        var.set("1")
        option = tk.OptionMenu(root,var,*vals)
        option.pack()
        t = option.children["menu"]
        tk.Menu
        #Do I need to unbind
        #t.bind("<<MenuSelect>>", self.test_func)
        t.bind("<<MenuSelect>>", self.test_func)
        t.bind("<Enter>",self.enter_func)
        t.bind("<Leave>",self.leave_func)

    def test_func(self,event = None):
        if self.parent.call(event.widget,"index","active") == 0:
            print("test")

    def enter_func(self,event=None):
        print("entered")

    def leave_func(self,event=None):
        print("left")
root = tk.Tk()
Application(root)
root.mainloop()

我发现关闭工具提示的一种方法(示例中未显示)是跟踪与选项菜单关联的变量,并在它更改时终止顶部窗口。但是,如果用户打开菜单,将鼠标悬停在选项上,然后在菜单项之外单击,则顶部窗口工具提示将保留,因为菜单项从未更改。

这个问题与这个问题非常相似

标签: pythoneventstkinteroptionmenu

解决方案


推荐阅读