PyQtのスレッド間の通信に問題があります。私は2つのスレッドSenderとListenerの間で通信するためにシグナルを使用しています。送信者は、リスナーが受信すると予想されるメッセージを送信します。ただし、メッセージは受信されません。誰が何が間違っているかもしれないと示唆することができます私はそれが何かシンプルでなければならないと確信していますが、何時間も探していて何も見つけられませんでした。前もって感謝します!PyQtのスレッディングとシグナルの問題
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は、信号が入っているオブジェクトのインスタンスを作成したスレッドに依存して信号を送信するためにどのスレッドを決定します。あなたのメインスレッドからリスナーオブジェクトを作成し、それに信号を送信する場合、それは彼らを呼び出します意味メインスレッドでオブジェクトはスレッドではないことを忘れないでください。例えば、 Qtの「スレッドアフィニティ」の詳細については、ftp://ftp.qt.nokia.com/videos/DevDays2007/DevDays2007%20-%20Multi-threading_in_Qt.pdfを参照してください。 –