将线程信号连接到MainWindow

时间:2014-10-19 08:02:31

标签: python multithreading signals-slots

我有两节课。一个是mainWindow类,另一个是更新进度条的线程,等等。

要更新progressBar我正在使用这样的信号/插槽结构:(我显示相关代码):

import threading
from PyQt4 import QtCore, QtGui, Qt


class MyThread(threading.Thread):

    mySignal = QtCore.pyqtSignal(int, int)    

    def __init__(self,*args):
        threading.Thread.__init__(self)

class Form1(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    ...
    ...
    @pyqtSlot(int, int)
    def updateProgress(self, arg1, arg2):
        print "TEST Argument1: ", arg1
        print "TEST Argument2: ", arg2


    def my_function(self):
        mt = MyThread(*args)
        mt.mySignal .connect(self.updateProgress)
        mt.start()

我得到这个,我不确定理解:

    mt.mySignal .connect(self.updateProgress)
TypeError: pyqtSignal must be bound to a QObject, not 'MyThread'

1 个答案:

答案 0 :(得分:1)

你需要继承 QThread ,而不是继承python Thread。否则,QObject-Thread-ownership对于信号/插槽跨越线程边界起作用是至关重要的,这是不可能的。