的Tkinter Menubutton小部件键结合在同一窗口
问题描述:
打开菜单控件元素我一直在使用Menubutton
和Menu
小部件创建菜单内的子菜单:的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
?) 。我无法在任何地方找到解决这一特定问题的解决方案。
那么我怎么能让它发生?任何帮助,将不胜感激。
答
我觉得
def f(event):
submenu.post(mainmenu.winfo_rootx(),
mainmenu.winfo_rooty() + mainmenu.winfo_height())
你想要做什么,甚至与tearoff=False
选项。
+0
这种方式是迄今为止最好的解决方案。我必须将其包含在我的代码中。实际上,我期望更“自然”的方式。 –
这听起来像你问如何创建一个实际上不是菜单的菜单?如果它不是一个弹出窗口。你如何期待它出现? “与菜单在同一窗口中打开”是什么意思? –
我想让子菜单不被撕掉。 –
同样,当我不使用'tearoff = 0'时,它的功能就像魅力一样,但是当我添加这个功能时,它不会返回任何东西。这很奇怪。 –