python - PyQt 中的线程和信号问题

标签 python multithreading pyqt signals

我在 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'

最佳答案

我不确定这是否是您需要的,但它工作正常...

from PyQt4 import QtCore,QtGui
import time

class Listener(QtCore.QThread):
    def __init__(self):
        super(Listener,self).__init__()

    def run(self):
        print('listener: started')
        while True:
            time.sleep(2)

    def connect_slots(self, sender):
        self.connect(sender, QtCore.SIGNAL('testsignal'), self.say_hello)

    def say_hello(self):
        print('listener: received signal')

class Sender(QtCore.QThread):
    def __init__(self):
        super(Sender,self).__init__()

    def run(self):
        for i in range(5):
            print('sender: sending signal')
            self.emit(QtCore.SIGNAL('testsignal'))
            time.sleep(2)
        print('sender: finished')

if __name__ == '__main__':
    o_qapplication = QtGui.QApplication([])
    my_listener = Listener()
    my_sender = Sender()
    my_listener.connect_slots(my_sender)
    my_listener.start()
    my_sender.start()
    i_out = o_qapplication.exec_()

关于python - PyQt 中的线程和信号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323678/

相关文章:

python - 绘图铅笔断了

Python PyQt QWebView 在单击的选项卡中加载站点

python - Moviepy - 类型错误 : Can't convert 'bytes' object to str implicitly

python - 如果出现在 python 中,如何从列值中删除额外的小数

python - Django 测试 : how to specify the apps whose databases I want to use?

c# - 将 C# System.Timer 转换为 Threading.Timer

java - 以线程安全的方式使用 ExecutorService 和 ProgressMonitor

python - 在类中没有 'self' 参数的函数有什么意义?

具有多线程的 Java Servlet

python - 如何使用pyqt4在窗口中的网页上建立链接?