python Tkinter:将参数传递给函数

时间:2012-04-23 22:19:59

标签: python tkinter

可以请任何人帮我解决我的问题。我是python的新手,在以下情况下我无法获得如何将参数传递给函数: 在一个单独的文件(sentiment_analysis)中,我有一个字典和一个对象数组:

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)

我认为我必须传递label(p)的值作为onButtonPosObject()函数的参数,我需要从positiveSentiments字典中获取每个对象的单词列表,但我得到像[]这样的空值。 我会非常感谢任何建议!

2 个答案:

答案 0 :(得分:4)

您需要在lambda中捕获p的当前值:

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

答案 1 :(得分:0)

我猜你的积极信息['摩托罗拉']清单是空的。我将在'for se in sentiment_analysis.objects'循环中添加一个print语句来查看最新情况。当你在这样的循环中使用lambda命令时,你最终设置每个菜单项的命令,以便在调用onButtonPosObject时为p传递相同的值(它将是p的最终值)。

您需要将变量保存到每个lambda的本地名称,并将其作为参数传递(我知道它看起来很乱):lambda x=p: onButtonPosObject(x)。试一试,看看你得到了什么。

相关问题