2014-10-19 40 views
0

我有两个类。一个是mainWindow类,另一个是更新进度条的线程等等。将线程信号连接到MainWindow

更新我使用的是信号/槽结构是这样的进度:(我显示相关代码):

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

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

+0

它工作完美,谢谢....真是惊人的如何在代码中的这样一个小的变化使差异....它实际上从崩溃到工作只是通过改变几行 – codeKiller 2014-10-19 09:14:18

相关问题