2016-07-30 39 views
0

打开菜单控件元素我一直在使用MenubuttonMenu小部件创建菜单内的子菜单:的Tkinter Menubutton小部件键结合在同一窗口

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))。但现在,它不会返回任何东西。我想弄明白为什么它没有。也许我做错了什么...
我已经找到了一个解决方案,但没有一个解决了这个问题。他们所说的只是添加一个键绑定来打印某些东西,但是我想要一个键绑定,它会自动点击一个菜单项,并且弹出项目元素,但不是作为一个单独的窗口(可能叫做contextmenu?) 。我无法在任何地方找到解决这一特定问题的解决方案。
那么我怎么能让它发生?任何帮助,将不胜感激。

+0

这听起来像你问如何创建一个实际上不是菜单的菜单?如果它不是一个弹出窗口。你如何期待它出现? “与菜单在同一窗口中打开”是什么意思? –

+0

我想让子菜单不被撕掉。 –

+0

同样,当我不使用'tearoff = 0'时,它的功能就像魅力一样,但是当我添加这个功能时,它不会返回任何东西。这很奇怪。 –

回答

1

我觉得

def f(event): 
    submenu.post(mainmenu.winfo_rootx(), 
       mainmenu.winfo_rooty() + mainmenu.winfo_height()) 

你想要做什么,甚至与tearoff=False选项。

+0

这种方式是迄今为止最好的解决方案。我必须将其包含在我的代码中。实际上,我期望更“自然”的方式。 –

相关问题