2012-04-23 232 views
2

任何人都可以幫我解決我的問題。我是新來的蟒蛇,我不能得到如何在下列情況下,一個參數傳遞給一個函數: 在一個單獨的文件(sentiment_analysis)我有一本字典和對象的數組:python Tkinter:將參數傳遞給函數

positiveSentiments = dict() // here are some words related to each of the object 
objects = ['Google', 'Apple', 'Motorola'] 

我需要顯示每個對象的正面情緒:

def onButtonPosObject(p): 
for key in sentiment_analysis.positiveSentiments.keys(): 
    if key == p: 
     text.insert(END, sentiment_analysis.positiveSentiments[key]) 

submenu = Menu(text, tearoff=0) 
for p in sentiment_analysis.objects: 
    submenu.add_command(label=p, command = lambda : onButtonPosObject(p), underline=0) 
textmenu.add_cascade(label='Display positive sentiments', menu=submenu, underline=0) 

我想我必須要通過標籤(p)的值作爲onButtonPosObject()函數的參數,我需要從positiveSentiments字典得到一個單詞列表,每對象,但我得到像[]的空值。 我會非常感謝任何建議!

回答

4

您需要捕捉p的電流值在lambda:

submenu.add_command(label=p, command = lambda p=p: onButtonPosObject(p), underline=0) 
+0

這一工程!非常感謝! – 2012-04-24 06:23:54

0

我在猜測發生了什麼事情是您的positiveSentiments ['Motorola']列表爲空。我會在'for sentiment_analysis.objects'循環中添加一個打印語句,以查看正在發生的事情。當你在這樣的循環中使用lambda命令時,最終爲每個菜單項設置命令,以便在調用onButtonPosObject時爲p傳遞相同的值(它將是p的最終值)。

您需要將變量保存爲每個lambda的本地名稱,並將其作爲參數傳遞(看起來很亂,我知道):lambda x=p: onButtonPosObject(x)。試試看看你得到了什麼。