글쎄, 나는 Qt에 익숙하지만, PyQt를 사용할 때 signal/slot의 구문이 나를 혼란스럽게 만든다. C++/Qt를 사용할 때, 컴파일러는 신호/슬롯에 대한 잘못된 점을 알려줄 것입니다. 그러나 PyQt 기본 설정은 오류에 대한 힌트를 제공하지 않습니다. PyQt가 더 많은 정보를 표시 할 수있게하는 디버그 트리거 모드와 같은 방법이 있습니까? 코드는 다음과 같습니다 :사용자 정의 신호/슬롯을 처리 할 때 PyQt와 Qt의 차이점
C++에서from PyQt4.QtCore import *
from PyQt4.QtGui import *
import time
class workThread(QThread):
def __init__(self,parent = None):
super(workThread,self).__init__(parent)
self.mWorkDoneSignal = pyqtSignal() ## some people say this should be defined as clas member, however, I defined it as class member and still fails.
def run(self):
print "workThread start"
time.sleep(1)
print "workThread stop"
print self.emit(SIGNAL("mWorkDoneSignal"))
class MainWidget(QWidget):
def __init__(self , parent = None):
super(MainWidget,self).__init__(parent)
@pyqtSlot()
def display(self):
print "dispaly"
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
c = workThread()
d = MainWidget()
##In Qt, when using QObject::connect or such things, the return value will show the
## signal/slot binding is success or failed
print QObject.connect(c,SIGNAL('mWorkDoneSignal()'),d,SLOT('display()'))
c.start()
d.show()
app.exec_()
는 QObject를 :: 바인딩 신호/슬롯을 보여줍니다 반환 값을 연결 성공 여부이다. PyQt에서 반환 값은 True이지만 슬롯을 트리거하지는 않습니다. 내 질문 : 1) 신호는 클래스 멤버 또는 인스턴스 멤버입니까? 2) QObject.connect의 반환 값이 바인딩 성공에 대한 힌트를 줄 수 없다면이를 감지하는 다른 방법이 있습니까? 신호 발신자와 슬롯 수신기 외부의 신호/슬롯을 바인딩하려고하므로 QObject.connect 방법을 사용합니다. 하지만 어떻게이 글을 쓸 수 있을까요? 다음과 같은 방법으로 시도해 보았습니다. 둘 다 실패합니다.
QObject.connect(c,SIGNAL('mWorkDoneSignal'),d,SLOT('display'))
QObject.connect(c,SIGNAL('mWorkDoneSignal()'),d,SLOT('display()'))