2017-04-25 57 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

相關問題