【问题标题】:python Tkinter: passing an argument to a functionpython Tkinter:将参数传递给函数
【发布时间】:2012-04-23 22:19:58
【问题描述】:

请任何人帮助我解决我的问题。我是 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)

我认为我必须将标签 (p) 的值作为 onButtonPosObject() 函数的参数传递,并且我需要从 positiveSentiments 字典中为每个对象获取单词列表,但我得到了像 [] 这样的空值。 如果有任何建议,我将不胜感激!

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我猜你的 positiveSentiments['Motorola'] 列表是空的。我会在那个“for p in evidence_analysis.objects”循环中添加一个打印语句,看看发生了什么。当您在这样的循环中使用 lambda 命令时,您最终会为每个菜单项设置命令,以便在它们调用 onButtonPosObject 时为 p 传递相同的值(它将是 p 的最终值)。

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

      【讨论】:

        猜你喜欢
        • 2015-01-23
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-24
        • 2017-12-30
        • 1970-01-01
        相关资源
        最近更新 更多