在 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中文网其他相关文章!