我已经在网上看了很多,包括帖子"在python中理解lambda并使用它传递多个参数"但是仍然有些事情我不了解在pyside插槽中使用lambda和传递参数,希望有人可以提供帮助: - )
我有一个像这样的多个插槽的pyside QWidget:
self.push_register.clicked.connect(lambda: self.register(name))
,功能如下:
def register(self, name):
register code here
所以这是一些基本的东西,它的工作方式与预期的一样。
现在我创建了一个cythonized .so文件。到目前为止,几乎所有的代码仍然像预期的那样工作,但是当我尝试使用lambda并传递一些参数时,我正在努力使用插槽。我突然得到了错误
TypeError: lambda8() takes no arguments (1 given)
此错误出现在不同的位置。
我尝试将插槽更改为使用lambda x:如下所示:
self.push_register.clicked.connect(lambda x: self.register(name))
在一些有效的位置,但在某些插槽中它没有用。然后我读到使用functools.partial作为lambda的替代品,这在一些插槽上再次工作,但不是全部。我现在被困住了,并且不了解如何使用pyside插槽传递cythonized文件的参数。在普通的.py文件中,一切都可以通过使用lambda来实现。
我什么时候可以使用像
这样的简单回调 self.push_register.clicked.connect(lambda: self.register(name))
我何时使用:
self.push_register.clicked.connect(lambda x: self.register(name))
我何时使用:
self.push_register.clicked.connect(functools.partial(self.register, name))
收据何时使用?有没有办法只为所有回调使用一张收据?有人可以帮忙吗?谢谢
更新:所以以下工作正常: