【发布时间】:2017-03-09 00:47:20
【问题描述】:
我在 PyQt 中的线程之间进行通信时遇到了一些问题。我正在使用信号在两个线程之间进行通信,一个 Sender 和一个 Listener。发送者发送消息,这些消息预计会被侦听器接收。但是,没有收到任何消息。谁能建议可能出了什么问题?我敢肯定它一定很简单,但我已经四处寻找了几个小时,但没有找到任何东西。提前致谢!
from PyQt4 import QtCore,QtGui
import time
class Listener(QtCore.QThread):
def __init__(self):
super(Listener,self).__init__()
def run(self):
# just stay alive, waiting for messages
print 'Listener started'
while True:
print '...'
time.sleep(2)
def say_hello(self):
print ' --> Receiver: Hello World!'
class Sender(QtCore.QThread):
# a signal with no arguments
signal = QtCore.pyqtSignal()
def __init__(self):
super(Sender,self).__init__()
# create and start a listener
self.listener = Listener()
self.listener.start()
# connect up the signal
self.signal.connect(self.listener.say_hello)
# start this thread
self.start()
def run(self):
print 'Sender starting'
# send five signals
for i in range(5):
print 'Sender -->'
self.signal.emit()
time.sleep(2)
# the sender's work is done
print 'Sender finished'
【问题讨论】:
-
Qt 决定向哪个线程发送信号取决于哪个线程创建了信号所在的对象实例。这意味着如果您从主线程创建一个 Listener 对象并向其发送信号,它将在主线程中调用它们。请记住,对象不是线程。参见例如ftp.qt.nokia.com/videos/DevDays2007/… 了解 Qt 中“线程关联”的详细信息。
标签: python multithreading pyqt signals