如何使用&lt; <menuselect>&gt;绑定到tkinter菜单项选择

时间:2015-10-14 18:04:11

标签: python python-3.x tkinter python-3.4

我一直试图将回调绑定到菜单项选择,而不是使用add_command方法的command = functions。

然而,似乎无论我尝试什么,它只会给我一个适当的菜单项索引(&#34;菜单1&#34;和&#34;菜单2&#34;)当它们被选中时而不是菜单按钮的索引。按下按钮将只打印无。

这是我目前的测试代码,但我一直在尝试一些不同的东西。

import tkinter as tk

def menucallback(event):
    print(root.call(event.widget, "index", "active"))

root = tk.Tk()

# create menu
menubar = tk.Menu(root)
menu1 = tk.Menu(menubar, tearoff=0)
menu1.add_command(label="Button 1")
menu1.add_command(label="Button 2")
menubar.add_cascade(label="Menu 1", menu=menu1)

menu2 = tk.Menu(menubar, tearoff=0)
menu2.add_command(label="Button 6")
menu2.add_command(label="Button 7")

menubar.add_cascade(label="Menu 2", menu=menu2)

tk.Tk.config(root, menu=menubar)

# bind to function
menubar.bind("<<MenuSelect>>", menucallback)

root.mainloop()

如果重要的话,我在使用Python 3.4的Windows 7上

2 个答案:

答案 0 :(得分:0)

如果您希望在下拉菜单中触发事件,则需要为每个菜单添加相同的绑定。

选择菜单项时没有得到的原因很可能是因为在调用回调之前菜单的状态发生了变化(即:点击后没有活动项目)。

答案 1 :(得分:0)

可能对您来说有点晚了,但是我当时认为我会需要它。 实际上我不需要,但是也许其他人需要它:

import tkinter as tk

def menucallback(event):
    check = root.call(event.widget, "index","active")
    if check != "none":
        menu_index.set(check)
def foo():
    display.configure(text=menu_index.get())
    index = menu_index.get()
    if index == 0:
        display.configure(bg='blue')
    if index == 1:
        display.configure(bg='red')
    display.wait_variable(menu_index)
    foo()
    
    

root = tk.Tk()
display = tk.Label(root, text='default')
display.pack(fill='x')

menu_index = tk.IntVar()

menubar =tk.Menu(root)
menu1 = tk.Menu(menubar, tearoff=0)
menu1.add_command(label="Button1")
menu1.add_command(label="Button2")
menubar.add_cascade(label='Menu1', menu=menu1)

menu1.bind('<<MenuSelect>>', menucallback)
tk.Tk.config(root, menu=menubar)

foo()
root.mainloop()