PyQt,Python 3:Lambda槽为变量赋值信号?

时间:2015-06-05 05:10:55

标签: python python-3.x pyqt

假设以下PyQt信号:

value_changed = pyqtSignal(value)

有没有办法编写一个lambda插槽,将信号提供的值分配给某个变量,如此(显然是非法的)示例:

object1.value_changed.connect(lambda val: var1=val) 
object2.value_changed.connect(lambda val: var2=val) 
...

实现此类行为的最简洁方法是什么?我基本上想避免为每个这样的任务定义一个函数。

1 个答案:

答案 0 :(得分:2)

我认为你不能(或者应该想)用lambda来做这件事。请参阅answer可能的重复内容(我在您的问题下引用),了解您可以执行的操作。

做类似事情的一种方法是简单地定义一个带有两个参数的函数。可以使用该值和一些标识符来查找函数内的变量(例如,对象引用或字符串)。

我可能会建议:

object1.value_changed.connect(lambda val: store_var('var1', val)) 
object2.value_changed.connect(lambda val: store_var('var2', val)) 

如何实现store_var()当然高度依赖于yoru代码结构的其余部分,无论您是要将值存储在字典中还是作为全局变量或实例属性存储。但是,如果您希望能够在lambda表达式中访问存储位置,则不应该在访问存储位置时遇到任何问题。

<强>更新

根据您的评论,我假设对connect函数的调用位于包含data的类的方法内。您可以将该类的方法定义为

def store_var(self, name, value):
    setattr(self.data, name, value)

然后你会打电话给

object1.value_changed.connect(lambda val: self.store_var('var1', val))