我的程序中的奇怪错误,我不知道如何解释

时间:2012-01-29 14:58:32

标签: python wxpython contextmenu

我正在wxpython中编写一个简单的剪贴板管理器,以获得乐趣和利润。我遇到了一个特殊的错误,无论点击哪个菜单项,都会导致调用相同的函数。

代码为here,问题与第49-56行有关(“清除”项目工作正常) - 它总是调用最后创建的函数。

我尝试打印正在创建的lambda函数,菜单项,它的ID - 几乎所有我能想到的可能是问题的根源,但我没有找到任何线索。

如果我不能选择菜单项,我会陷入困境,所以我会感激所有和任何帮助。

1 个答案:

答案 0 :(得分:2)

正在i的封闭范围内查找CreateHistoryMenu的值。调用func时,i等于循环中的最后一个值。这就是菜单项全部调用最后创建的函数的原因。

如果您使用默认值将i添加到lambda的参数中,i将成为lambda本身的局部变量,其默认值为在定义lambda时受到约束。这将是i的正确值:

        func = lambda e, i = i: self.ChooseItem(i)