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()
好吧,但有沒有一種等同的方式來標識不是從'QObject'派生的類的發送者? – 2013-05-05 21:03:23
我剛剛嘗試過它,如果你在任何'QObject'上調用'sender()'方法,它似乎工作,我只是不確定是否安全(特別是在多層應用程序中)。請參閱文檔中的警告。 – mata 2013-05-05 21:10:23