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

发布于 2024-12-29 18:34:29 字数 317 浏览 1 评论 0原文

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

代码在 这里,问题与第 49-56 行有关(“Clear”项目工作得很好) - 它总是调用最后创建的函数。

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

如果我无法选择菜单项,我会有点困惑,所以我将不胜感激所有帮助。

I'm writing a simple clipboard manager in wxpython for fun and profit and I've run across a peculiar bug that is causing the same function to be called no matter which menu item is clicked.

The code is here and problem is related to lines 49-56 (the "Clear" item works just fine) - it always calls the last function created.

I tried printing the lambda function being created, the menu item, it's ID - pretty much everything that I could think of that could have been the source of problem, but I didn't find any clues.

I'm kinda stuck if I can't choose menu items so I'd appreciate all and any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妥活 2025-01-05 18:34:29

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

如果将 i 添加到具有默认值的 lambda 参数中,i 将成为 lambda 中的局部变量code> 本身,具有在定义 lambda 时绑定的默认值。这将是 i 的正确值:

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

The value of i is being looked-up in the enclosing scope of CreateHistoryMenu. When the func is called, i equals the last value in the loop. That is why the menu items all call the last function created.

If you add i to the arguments of the lambda with a default value, i will become a local variable in the lambda itself, with a default value which was bound at the time the lambda was defined. This will be the right value for i:

        func = lambda e, i = i: self.ChooseItem(i)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文