在槽中使用lambda的pyside / cython会产生错误

时间:2016-01-03 22:43:01

标签: lambda callback pyside cython

我已经在网上看了很多,包括帖子"在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))

收据何时使用?有没有办法只为所有回调使用一张收据?有人可以帮忙吗?谢谢

更新:所以以下工作正常:

https://gist.github.com/anonymous/7f97d7bd61f2652f1e3e

0 个答案:

没有答案