2014-10-19 38 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

相關問題