我正在wxpython中编写一个简单的剪贴板管理器,以获得乐趣和利润。我遇到了一个特殊的错误,无论点击哪个菜单项,都会导致调用相同的函数。
代码为here,问题与第49-56行有关(“清除”项目工作正常) - 它总是调用最后创建的函数。
我尝试打印正在创建的lambda函数,菜单项,它的ID - 几乎所有我能想到的可能是问题的根源,但我没有找到任何线索。
如果我不能选择菜单项,我会陷入困境,所以我会感激所有和任何帮助。
答案 0 :(得分:2)
正在i
的封闭范围内查找CreateHistoryMenu
的值。调用func
时,i
等于循环中的最后一个值。这就是菜单项全部调用最后创建的函数的原因。
如果您使用默认值将i
添加到lambda
的参数中,i
将成为lambda
本身的局部变量,其默认值为在定义lambda时受到约束。这将是i
的正确值:
func = lambda e, i = i: self.ChooseItem(i)