2013-05-05 62 views
1

以下面的代碼爲例,我想知道receiver()函數是否能夠發現w1或w2是否發送了它的信號?是否可以使用新樣式pyqtSignal發現信號的發送者?

顯然我知道我可以將這些信息打包到信號中發送的消息中,但是我想知道它是否可用,而不是這樣做。據我所知sender()功能不可用於接收器。

import sys, time, random 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class Worker(QThread): 
    jobDone = pyqtSignal(str) 

    def __init__(self): 
     print 'new Worker' 
     QThread.__init__(self) 

    def run(self): 
     time.sleep(2) # give time for event loop to start 
     print 'thread working' 
     time.sleep(random.randint(1,8)) 
     self.jobDone.emit('job done') 

class Manager: 
    def __init__(self): 
     self.w1 = Worker() 
     self.w1.jobDone.connect(self.receiver) 

     self.w2 = Worker() 
     self.w2.jobDone.connect(self.receiver) 

     self.w1.start() 
     self.w2.start() 

    def receiver(self, msg): 
     print msg 

def main(): 
    app = QApplication(sys.argv) 
    m = Manager() 
    print 'before event loop' 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

回答

1

sender()方法可從QObject派生的所有類,但你的Manager類是不是QObject子類。

如果您想在課堂上使用sender(),只需將其繼承自QObject即可。

+0

好吧,但有沒有一種等同的方式來標識不是從'QObject'派生的類的發送者? – 2013-05-05 21:03:23

+2

我剛剛嘗試過它,如果你在任何'QObject'上調用'sender()'方法,它似乎工作,我只是不確定是否安全(特別是在多層應用程序中)。請參閱文檔中的警告。 – mata 2013-05-05 21:10:23

相關問題