Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt信号:设置变量_Python_Qt_Pyqt_Pyside - Fatal编程技术网

Python PyQt信号:设置变量

Python PyQt信号:设置变量,python,qt,pyqt,pyside,Python,Qt,Pyqt,Pyside,我有一个信号,它只需要做一件事:如果发出,给变量指定一个给定的值。为此创建一个方法似乎很愚蠢,所以我在想:有没有这样的方法: self.myButton.clicked.connect(self.someVariable = None) self.myButton.clicked.connect(lambda self=self: setattr(self, 'someVariable', None)) 使用lambda: self.myButton.clicked.connect(lamb

我有一个信号,它只需要做一件事:如果发出,给变量指定一个给定的值。为此创建一个方法似乎很愚蠢,所以我在想:有没有这样的方法:

self.myButton.clicked.connect(self.someVariable = None)
self.myButton.clicked.connect(lambda self=self: setattr(self, 'someVariable', None))
使用lambda:

self.myButton.clicked.connect(lambda : self.someVariable = None)
注:

  • self
    在插槽调用时被引用,因此您可能需要执行以下操作:

    self.myButton.clicked.connect(lambda self=self:self.someVariable=None)

  • 一些小部件发送带有参数的信号,您必须将它们放入lambda定义中

    self.myButton.clicked.connect(lambda checked=False,self=self:self.someVariable=None)

  • 更新:

    lambda中不允许赋值,因此必须使用实函数或类似的东西:

    self.myButton.clicked.connect(self.someVariable = None)
    
    self.myButton.clicked.connect(lambda self=self: setattr(self, 'someVariable', None))
    

    听起来像是lambda的工作。仅供参考,stackoverflow不喜欢签名/签核。它占用了不必要的空间。谢谢你指出这一点!我得到:SyntaxError:lambda不能包含赋值,我尝试了你提到的两个版本,是的,你是对的。这行不通。我想你必须使用真正的函数,而不是像这样摆弄:
    self.myButton.clicked.connect(lambda:setattr(self'someVariable',None))