2017-04-25 29 views
0

我有一个for:循环,并将每个邮箱我的邮件服务器创建一个Tkinter的菜单级联,都指向同一个命令,下面的代码:有什么办法可以获得tkinter菜单按钮的信息吗?

menubar = Menu (rootA) 
    foldermenu = Menu(menubar, tearoff=0) 
    for i in range(len(mailboxes)): 
     foldermenu.add_command(label=mailboxes[i], command=switchBox) 

但我需要一种方法来准确确定哪个按钮是在我的代码中单击,那么是否有任何方法可以返回刚刚创建的菜单选择的“标签”或返回索引或其他方式?例如,tkinter列表框具有功能.curselection()

+0

无关,但您可以使用'command = switchBox',而不使用'lambda'和'()' –

+0

哦,谢谢!我之前正在通过一些变量,试图让它起作用,并且必须忘记删除它。 – Imm

+0

或者您可以将'i'传递给lambda;在这种情况下,记住lambda中的变量在调用函数时计算,而不是在定义时计算(参见例如[here](http://stackoverflow.com/q/19837486/1639625)),即使用某些像'command = lambda x = i:switchBox(x)' –

回答

2

您可以将邮箱传递给回调。这是您希望使用lambda的主要原因。如果您未通过任何值,则使用lambda没有意义。

def switchBox(mailbox): 
    ... 

foldermenu.add_command(..., command=lambda mbox=mailboxes[i]: switchBox(mbox)) 
... 

注:本作品,因为我们在创建lambda时间结合的mbox值。有关lambda和绑定值的更多信息,请参阅What do (lambda) function closures capture?

+0

这很完美!我一直在尝试做类似的事情,但由于格式化,我总是收到循环中的最后一个邮箱,谢谢! – Imm

相关问题