Tkinter Menubutton小部件键绑定到同一窗口中打开Menu小部件元素

时间:2016-07-30 13:18:43

标签: python python-3.x tkinter submenu

我使用MenubuttonMenu小部件在菜单中创建了一个子菜单:

from tkinter import *
root = Tk()

def f(event):
    submenu.invoke(0)

mainmenu = Menubutton(root, text="Menu")
mainmenu.pack()

submenu = Menu(mainmenu)
mainmenu.config(menu=submenu)

submenu.add_command(label="Option 1")
submenu.add_command(label="Option 2")

现在我想在我的菜单中添加一个键绑定:

mainmenu.bind("<Key>", f)
mainmenu.focus_set()

它有魅力:当我按下一个键时,它会打开子菜单。但问题是,子菜单是作为一个撕裂的顶层窗口打开的。但是我想用菜单在同一个窗口打开它。我将tearoff=0添加到submenu中(因此它变成了这样:submenu = Menu(mainmenu, tearoff=0))。但现在,它不会返回任何东西。我试图弄清楚它为什么没有。也许我做错了什么......我找了一个解决方案,但没有一个能解决问题。他们所说的只是添加了一个打印出来的键绑定,但是我想要一个自动点击菜单项的键绑定,它会弹出项目元素,但不会作为一个单独的窗口(也许它是&#39; s叫contextmenu?)。我无法在任何地方找到解决这个特定问题的方法 那我怎么能实现呢?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为

def f(event):
    submenu.post(mainmenu.winfo_rootx(), 
                 mainmenu.winfo_rooty() + mainmenu.winfo_height())
即使使用tearoff=False选项,

也能做到你想要的。