4
點擊級聯中的命令按鈕後,我想保持菜單級聯打開。所以它基本上只在用戶點擊其他地方時纔會關閉(就像通常那樣)。似乎無法找到一個合適的選項或方法來打開回調中的菜單。 invoke()函數僅適用於級聯右側的按鈕?你會怎麼做?在Tkinter中打開菜單
點擊級聯中的命令按鈕後,我想保持菜單級聯打開。所以它基本上只在用戶點擊其他地方時纔會關閉(就像通常那樣)。似乎無法找到一個合適的選項或方法來打開回調中的菜單。 invoke()函數僅適用於級聯右側的按鈕?你會怎麼做?在Tkinter中打開菜單
是的,我知道這是很久以前問過的,但我很好奇是否有辦法用tkinter來完成這個任務,所以我弄了一會兒,弄清楚了怎麼做。我無法想出一種方法來將持久性菜單正確放置在最初打開時的位置,但我已設法使其保留在您請求的任何位置(我使用根窗口的左上角)。是的,我知道這不是一個很好的適當的基於類的實現,但我只是簡單地進行測試,因爲我可以編寫而不用太多的無關細節來掩蓋它。
try:
from tkinter import *
from tkinter.ttk import *
except:
from Tkinter import *
from ttk import *
root = Tk()
var = StringVar()
def menu_click(menu, item):
global root
var.set(item)
menu.post(root.winfo_rootx(), root.winfo_rooty())
root.option_add('*tearOff', False) # remove tearoff from all menus
Label(root, textvariable=var).pack() # just to give menu clicks some feedback
root.geometry('400x300')
menubar = Menu(root)
root['menu'] = menubar
menu_test = Menu(menubar)
menubar.add_cascade(menu=menu_test, label='Test')
menu_test.add_command(label='One', command=lambda: menu_click(menu_test, 'One'))
menu_test.add_command(label='Two', command=lambda: menu_click(menu_test, 'Two'))
menu_test.add_command(label='Three', command=lambda: menu_click(menu_test, 'Three'))
menu_cas = Menu(menu_test)
menu_test.add_cascade(menu=menu_cas, label='Four')
menu_cas.add_command(label='One', command=lambda: menu_click(menu_cas, 'Fourty One'))
menu_cas.add_command(label='Two', command=lambda: menu_click(menu_cas, 'Fourty Two'))
menu_cas.add_command(label='Three', command=lambda: menu_click(menu_cas, 'Fourty Three'))
root.mainloop()