我有一个PyQt小部件,它用numpy.ndarray
数据发送信号。我有另一个PyQt小部件,它有一个带有numpy.ndarray
数据的插槽。
这两个小部件都位于我的主窗口上,该窗口是从*.ui文件编译的。小部件被设置为已升级的小部件。
我不能以某种方式连接Qt Creator中的信号和插槽吗?
刚才它给了我下一个错误:
TypeError: C++ type 'ndarray' is not supported as a slot argument type
原因是Qt只支持作为信号参数传递的QMetaType中定义的数据类型,如下所示http://pyqt.sourceforge.net/Docs/PyQt4/qmetatype.html#Q_DECLARE_METATYPE根据ekhumuro的POST,我更新了以下代码,它应该适用于PyQt4,而不是在PyQt5上测试。
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from numpy import *
class MyThread(QThread):
mysignal = pyqtSignal(ndarray)
def __init__(self, parent=None):
super(MyThread, self).__init__(parent)
def run(self):
while True:
QThread.msleep(100)
self.mysignal.emit(array((1, 2, 3, 4)))
class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
self.thread = MyThread()
self.thread.mysignal.connect(self.handleSignal)
self.thread.start()
def handleSignal(self, data):
print data
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = MyWidget()
w.show()
app.exec_()