如何传递参数给工人的QThread类? [重复](How can I pass argument

2019-10-20 17:54发布

这个问题已经在这里有一个答案:

  • 在PyQt的开始新的QThread()时传递一个参数 2个回答

我有一个创建一个QThread的,必须从我的类(MyClass的)调用的代码工作的例子。 我试图通过工人的init传递额外的参数,但我不能得到它的工作。

我怎样才能通过1个或多个参数,以我的工作线程这个工作代码?

from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtCore import * 

class Worker(QThread):
    processdone = QtCore.pyqtSignal("QString") # Define custom signal.
    def __init__(self, parent=None):
        QThread.__init__(self, parent)
    def run(self):
        print("do worker thread processing here")
        self.emit( SIGNAL('processdone'), "DONE")
        return       

class MyClass(QObject):

    def __init__(self):            
        super(MyClass, self).__init__()   

        thread1 = Worker(self) 
        self.connect( thread1, SIGNAL("processdone"), self.thread1done)  
        thread1.start()  

    def thread1done(self, text):
        print(text)                      # Print the text from the signal.
        sys.exit()

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)  
    a = MyClass()
    sys.exit(app.exec_())

:我发现这个计算器的问题,这是非常相似的,但我不能得到公认的答案与我上面的代码工作开始在PyQt的新的QThread()时传递参数

Answer 1:

不,我想不重复的问题,它有更多的事情要做......

不管怎样,你的问题你想通过更多的参数,在Python中你可以通过许多参数调用“yourMethod(* ARGS,** KW)”; 例;

class Worker(QThread):
    .
    .
    def __init__(self, parent, *args, **kw):
        QThread.__init__(self, parent)
        self.yourInit(*args, **kw)
    .
    .
    def yourInit (self, x, y, z):
        print x, y, z
    .
    .

class MyClass(QObject):
        .
        .
    def __init__(self):            
        super(MyClass, self).__init__()   
        .
        .
        x = 1000
        y = 'STRING'
        z = [0, 1, 2, 3, 4]
        thread1 = Worker(self, x, y, z)
        .
        .

问候,



文章来源: How can I pass arguments to QThread Worker class? [duplicate]