使用新型信号/插槽时的 PyQt_PyObject 等效项?

Posted

技术标签:

【中文标题】使用新型信号/插槽时的 PyQt_PyObject 等效项?【英文标题】:PyQt_PyObject equivalent when using new-style signals/slots? 【发布时间】:2010-09-21 00:28:55 【问题描述】:

所以我需要在我的 PyQt 应用程序中传递一个 numpy 数组。我首先尝试使用新型信号/插槽,用以下方式定义我的信号:

newChunkToProcess = pyqtSignal(np.array()),但是这给出了错误: 类型错误:找不到所需的参数“对象”(位置 1)

我已经想出了如何使用旧式信号和插槽来做到这一点 self.emit(SIGNAL("newChunkToProcess(PyQt_PyObject)"), np.array([5,1,2])) - (是的,这只是测试数据:),但我想知道,是否可以使用新式系统来做到这一点?

【问题讨论】:

【参考方案1】:

您要查找的类型是 np.ndarray 您可以从以下代码中看出这一点:

>>> arr = np.array([])  # create an array instance
>>> type(arr)           # ask 'what type is this object?'
<type 'numpy.ndarray'>

所以你的信号应该看起来更像:

newChunkToProcess = pyqtSignal(np.ndarray)

(请注意,我传递的是 type np.ndarray,而不是您尝试的数组 instance)。 如果您不想担心参数的类型,您可以改用:

newChunkToProcess = pyqtSignal(object)

这应该允许您通过信号发送任何数据类型。

另外:numpy 和 Qt 不共享我所知道的任何主要功能。事实上,两者是相当互补的,并且是一个非常强大的组合。

【讨论】:

谢谢,这是一个现在已成为历史的大学项目,但那里有一些很好的提示:)【参考方案2】:

你做错了。您必须在案例列表中传递数据对象类型:int、str、...

就像我正在做的那样:

images = pyqtSignal(int, str);
failed = pyqtSignal(str, str);
finished = pyqtSignal(int)

【讨论】:

那么numpy数组的类型是什么?

以上是关于使用新型信号/插槽时的 PyQt_PyObject 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

具有任意类型参数的 PyQt 信号 / PyQt_PyObject 等效于新型信号

Qt - 使用 lambda 函数修改先前连接信号的插槽参数

没有信号/插槽的 QtcpSocket

使用 Qt Designer 在 PySide2 中实现信号/插槽时出错

PyQt5:使用插槽/信号时,self 是 NoneType

QT:使用移动语义将信号连接到插槽