Python 如何从一个类发出Qtsignal,从而在pyqt中从其父类发出Qtsignal

Python 如何从一个类发出Qtsignal,从而在pyqt中从其父类发出Qtsignal,python,multithreading,qt,pyqt,pyqt4,Python,Multithreading,Qt,Pyqt,Pyqt4,我有一个要求,我的执行将发生在线程中,我希望从该线程向主类发出信号。下面是我的示例代码片段,我在其中创建了MainClass的一个实例,并将其分配给temp。其中,MainClass内部连接到一个线程Thread1,实际工作将在该线程中进行。当信号从Thread1发出时,我希望执行从temp 代码片段 class Thread1(QtCore.QThread): ThreadSignal = QtCore.pyqtSignal(str) While True:

我有一个要求,我的执行将发生在线程中,我希望从该线程向主类发出信号。下面是我的示例代码片段,我在其中创建了
MainClass
的一个实例,并将其分配给
temp
。其中,
MainClass
内部连接到一个线程
Thread1
,实际工作将在该线程中进行。当信号从
Thread1
发出时,我希望执行从
temp

代码片段

class Thread1(QtCore.QThread):

    ThreadSignal = QtCore.pyqtSignal(str)

    While True:

        #some statments
        if Condition:
            ThreadSignal.emit('Yes')
        else:
            ThreadSignal.emit('No')

class MainClass(QtCore.QObject):

    MainSignal = QtCore.pyqtSignal(str)

    Testinstance = Thread1()

def signalcalled(s):

    print s

if __name__=='__main__':
    app = AtGui.QApplication(sys.argv)
    temp = MainClass()
    temp.MainSignal.connect(signalcalled)
    sys.exit(app.exec()_)
这应该起作用:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class myThread(QtCore.QThread):
    threadSignal = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(myThread, self).__init__(parent)

    def run(self):
        while True:
            if True:
                self.threadSignal.emit('Yes')

            else:
                self.threadSignal.emit('No')

            break

class myMainClass(QtCore.QObject):
    mainSignal = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(myMainClass, self).__init__(parent)

        testInstance = myThread(self)
        testInstance.threadSignal.connect(self.mainSignal.emit)
        testInstance.start()

def signalcalled(s):
    print s

if __name__ == "__main__":
    import  sys

    app = QtGui.QApplication(sys.argv)
    main = myMainClass()
    main.mainSignal.connect(signalcalled)
    sys.exit(app.exec_())

您是否尝试过
thread1.ThreadSignal.connect(self.MainSignal.emit)
?@Blender,如果我使用
thread1.ThreadSignal.connect(self.MainSignal.emit)
然后,如果我有两个
MainClass
实例,并且每个实例都必须在发出
Thread1
信号时运行不同的def,则会出现问题
Testinstance
是类变量还是实例变量?@Blender
Testinstance
Thread1
类的实例
MainClass
得到了解决方案,您的应用程序正在运行。另一个解决方法是将线程信号连接到主信号。我们可以使用“testInstance.threadSignal.connect(self.mainSignal.emit)”而不是“testInstance.threadSignal.connect(self.mainSignal)”,而不使用emit,它也可以工作。thx的帮助+1
class Thread1(QtCore.QThread):

    ThreadSignal = QtCore.pyqtSignal(str)

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

    def run(self):

        While True:

            #some statments
            if Condition:
                ThreadSignal.emit('Yes')
            else:
                ThreadSignal.emit('No')

class MainClass(QtCore.QObject):

    MainSignal = QtCore.pyqtSignal(str)

    def __init__(self):

        super(myThread, self).__init__()

        Testinstance = Thread1()
        Testinstance.ThreadSignal.connect(MainSignal)
        Testinstance.start()

def signalcalled(s):

    print s

if __name__=='__main__':
    app = AtGui.QApplication(sys.argv)
    temp = MainClass()
    temp.MainSignal.connect(signalcalled)
    sys.exit(app.exec()_)