PyQt:通过Qt Designer将插槽与自定义对象连接起来

时间:2015-02-24 16:23:47

标签: qt numpy pyqt

我有一个PyQt小部件,它发送带有numpy.ndarray数据的信号。我有另一个PyQt小部件,其中有一个带有numpy.ndarray数据的插槽。

这两个小部件都位于我的主窗口,它是从* .ui文件编译的。小部件被设置为提升的小部件。

我不能以某种方式连接Qt Creator中的信号和插槽吗?

刚才它给了我下一个错误:

TypeError: C++ type 'ndarray' is not supported as a slot argument type

1 个答案:

答案 0 :(得分:1)

原因是Qt只支持在作为信号参数传递的QMetaType中定义的数据类型,在这里查看http://pyqt.sourceforge.net/Docs/PyQt4/qmetatype.html#Q_DECLARE_METATYPE 根据ekhumoro的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_()