python – 有没有办法知道Tkinter optionmenu下拉是否有效?

我正在写一个Tkinter程序,我有一个带有其他UI元素的选项菜单.我要求如果optionmenu下拉在特定时间(比如1分钟)保持活动状态,我需要关闭下拉菜单并取消选择.我想知道是否有办法知道optionmenu下拉是否有效.我查看了
this特定的链接,但无法找到我需要的任何具体方法. 最佳答案 通过命令和单击绑定可以轻松地跟踪菜单是关闭还是打开.困难的部分是强制菜单关闭.从物理鼠标单击小部件或按Escape将执行此操作.但是生成事件却不行.下面的#commented_out位是失败的实验.

import tkinter as tk

root = tk.Tk()
n = 2
after_id = None
menu_open = False
omvar = tk.StringVar(root)

def timeout():
    print('timeout called')
    omvar.set('')
    #root.event_generate('<Key-Escape>', keysym='Escape', keycode=9)
    #om.destroy()
    #root.event_generate('<FocusIn>')
    #root.focus_get()
    #root.event_generate('<Button-1>', x=10, y=20)
    root.update()


def open(event):
    print('open called')
    global after_id, menu_open
    after_id = root.after(n*1000, timeout)
    menu_open = True

def close(val):
    print('closed by', val)
    global after_id, menu_open
    root.after_cancel(after_id)
    after_id = None
    menu_open = False

om = tk.OptionMenu(root, omvar, 'a', 'b', 'c', command=close)
om.bind('<Button-1>', open)
om.pack()
root.mainloop()

MenuButton菜单看起来几乎相同,可能更容易.你会考虑吗?

点赞