Tkinter menubutton错误

时间:2014-06-16 15:39:00

标签: python tkinter

我对这个小部件非常困惑,有人可以解决它吗?

from Tkinter import *

master = Tk()
mytext = StringVar()
mytext.set("DEFAULT")
def test_function(evt):
  mb.menu.delete(0, END)
  for i in range(20):
    mb.menu.add("command", label='%s'%i, command= lambda : mytext.set("%s"%i))


mb=  Menubutton (master, text="Test", relief=RAISED )
mb.menu  =  Menu ( mb, tearoff = 0 )
mb["menu"]  =  mb.menu
mb.bind('<Button-1>', test_function)
mb.grid(row = 0, column=1)
Label(master, textvariable=mytext).grid(row = 0, column=0)

master.mainloop()

mytext总是在选择按钮时显示列表的结尾如何解决它?

1 个答案:

答案 0 :(得分:1)

mb.menu.add("command", label='%s'%i, command= lambda : mytext.set("%s"%i))

i lambda中的command绑定到i的最后一个值,而不是调用add时的值。

您可以通过将其设为默认参数来将其欺骗为早期绑定:

mb.menu.add("command", label='%s'%i, command= lambda i=i: mytext.set("%s"%i))