首页 > 后端开发 > Python教程 > 为什么使用 Lambda 表达式将多个按钮连接到 PyQt 中的同一插槽会导致意外行为?

为什么使用 Lambda 表达式将多个按钮连接到 PyQt 中的同一插槽会导致意外行为?

Linda Hamilton
发布: 2024-11-08 13:22:02
原创
845 人浏览过

Why Does Using Lambda Expressions to Connect Multiple Buttons to the Same Slot in PyQt Lead to Unexpected Behavior?

在 PyQt 中使用 Lambda 表达式连接槽

在 Qt 中,lambda 表达式可用于将信号连接到槽。但是,这种方法存在一些限制,可能会导致意外行为。

问题:

使用 lambda 表达式将多个按钮连接到同一插槽时,仅最后的连接工作正常。具体来说,通过单独调用 connect() 手动连接的按钮是成功的,而使用 lambda 表达式循环连接的按钮都会产生相同的错误结果。

分析:

这个问题是由于 lambda 表达式在信号被触发时被求值,并且其可选参数的值被信号的参数覆盖这一事实而引起的。对于 QPushButton.clicked 信号,此参数表示按钮的状态。

解决方案:

要解决该问题,应修改 lambda 表达式如下所示:

button.clicked.connect(lambda state, x=idx: self.button_pushed(x))
登录后复制

通过将状态添加为 lambda 表达式的第一个参数,可以忽略它,同时仍然允许将 idx 的预期值传递到槽。

了解 Lambda 表达式连接:

当 lambda 表达式用于连接信号时,它会创建一个匿名函数,每当信号被触发时都会对该函数进行求值。 lambda 表达式的参数绑定到信号的参数,在本例中为按钮的状态。然后使用 lambda 表达式的结果作为参数来调用该槽。

以上是为什么使用 Lambda 表达式将多个按钮连接到 PyQt 中的同一插槽会导致意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板