【问题标题】:tkinter python - menu button doesnt work with a loop [duplicate]tkinter python - 菜单按钮不适用于循环[重复]
【发布时间】:2021-02-11 17:45:21
【问题描述】:

我在这个小代码中重新创建了一个有问题的项目

from tkinter import *
    
top = Tk()
    
mb=  Menubutton ( top, text="condiments", relief=RAISED )
mb.grid()
mb.menu =  Menu ( mb, tearoff = 0 )
mb["menu"] =  mb.menu

for dressing in ['ketchup','mayo']:
    mb.menu.add_command( label=dressing , command=lambda:print(dressing))

mb.pack()
top.mainloop()

所以在这个例子中,无论我在菜单中选择什么 - 它都会打印“蛋黄酱”,因为循环中的最后一个调味品是蛋黄酱,并且循环创建了菜单。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: python tkinter tkinter-menu


    【解决方案1】:

    试试这个

    from tkinter import *
    
    top = Tk()
        
    mb=Menubutton(top,text="condiments",relief=RAISED)
    mb.grid()
    mb.menu=Menu(mb,tearoff=0)
    mb["menu"]=mb.menu
    
    for dressing in ['ketchup','mayo']:
        mb.menu.add_command(label=dressing,command=lambda d=dressing:print(d))
    
    mb.pack()
    top.mainloop()
    

    添加d=dressingdressing 的当前值存储在变量d 中,该变量被发送到print 语句。

    它打印“mayo”,因为循环中的最后一个调味品是蛋黄酱

    这就是确切的原因,当稍后执行 lambda 函数时,它采用了最后分配的 dressing 值,在您的情况下恰好是 mayo 而不是它在分配时的值.

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多