내가하고 싶습니다 : 'Main'이라는 클래스가 있습니다. 'aClass'라는 또 다른 클래스가 있습니다. 그리고 '스레드 (Thread)'라는 제목의 클래스가 있습니다. 우리 스레드 클래스입니다. 'Main'이 메인 클래스이고 Main 클래스에서 Thread 클래스를 시작합니다. Thread 클래스가 시작되면 run() 함수에서 신호를 내 보냅니다 ... 'Main'과 'aClass'클래스는이 신호를 잡으려고합니다. 'Main'클래스는 Thread 클래스에서 방출 된 신호를 잡을 수 있지만 'aClass'에서 QThread를 시작하지 않았기 때문에 'aClass'는 동일한 신호를 포착 할 수 없습니다. 나는 'aClass'에서만 정의했다.QThread에서 2 등급에 대해 동일한 신호를 방출하는 방법
#!/usr/bin/env python
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class Main(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle("Test")
self.aClass = aClass()
self.thread = Thread()
self.thread.printMessage.connect(self.write)
self.initUI()
def initUI(self):
self.button = QPushButton("Start Process", self)
self.button.clicked.connect(self.startProcess)
def startProcess(self):
self.thread.start()
def terminateProcess(self):
self.thread.terminate()
def write(self):
print "Main: hello world..."
class aClass(object):
def __init__(self):
print "aClass: I have been started..."
self.thread = Thread()
self.thread.printMessage.connect(self.write)
def write(self):
print "aClass: hello world..."
class Thread(QThread):
printMessage = pyqtSignal()
def __init__(self):
QThread.__init__(self)
print "Thread: I have been started..."
def run(self):
self.printMessage.emit()
print "Thread: I emitted the message."
if __name__ == "__main__":
app = QApplication(sys.argv)
root = Main()
root.show()
app.exec_()
결과는 : 프로그램이 시작되면 는, 출력은 다음과 같습니다
내가 '프로세스 시작'버튼을 클릭aClass: I have been started...
Thread: I have been started...
Thread: I have been started...
, 출력은 다음과 같습니다
여기에 코드입니다
Thread: I emitted the message.
Main: hello world...
총 출력 :
,aClass: I have been started...
Thread: I have been started...
Thread: I have been started...
Thread: I emitted the message.
Main: hello world...
내가 싶어 출력 내가 '시작'을 클릭 :이 결과를 원하는
Thread: I emitted the message.
Main: hello world...
aClass: hello world...
을하지만 난 aClass '에서 self.thread.start() 명령을 사용하지 않으 '나는 ... 한 번만 스레드를 실행하려는 때문에
당신은 동일한 스레드에서 동일한 신호를 얻기 위해 노력하고 있습니까? –
예. 내 문제가 해결되었습니다. – PIC16F84A