2016-07-30 70 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

這種方式是迄今爲止最好的解決方案。我必須將其包含在我的代碼中。實際上,我期望更「自然」的方式。 –

相關問題