向工作线程PyQt发送值?

Posted

技术标签:

【中文标题】向工作线程PyQt发送值?【英文标题】:Send value to worker thread PyQt? 【发布时间】:2017-04-24 14:49:49 【问题描述】:

我只是在学习使用 PyQt 编写 GUI。我试图制作的 GUI 也发送一个带有 Pyserial 库的 Arduino 值。我让它工作了,但是在发送了几次之后,GUI 冻结了。 我在某处读到线程可以解决这个问题,所以我尝试了这个,但我不知道如何从主线程向工作线程发送值。例如,我也想将数字 123 发送到工作线程。我该怎么办?

【问题讨论】:

请添加您的代码的 sn-p 以便更好地理解。 【参考方案1】:

您可以在初始化时将参数传递给QThread,如下所示:

import sys
from PyQt4 import QtGui, QtCore

class FooThread(QtCore.QThread):

    def __init__(self, foo):
        super(FooThread, self).__init__()
        self.foo = foo

    def run(self):
        print self.foo    

def main():

        app = QtGui.QApplication(sys.argv) 
        foo_thread = FooThread('foo')
        foo_thread.start()
        foo_thread.finished.connect(QtGui.qApp.exit)
        sys.exit(app.exec_())


if __name__ == '__main__':
    main()

这个 sn-p 将创建一个 PyQt 应用程序,然后启动一个线程,该线程打印出传递给其构造函数的参数(在上面的示例中,它打印 foo),然后终止应用程序的执行。 希望对您有所帮助!

【讨论】:

嘿,这个方法确实有效。我的 Arduino 代码也有问题。仍然想知道是否有一种方法可以让您不必在每次发送值时都打开线程。谢谢! @Mr.Konnenhom 实际上,如果您愿意,我想我也可以为您推荐一个解决方案。 那太好了! @Mr.Konnenhom 看看这个:pythonfiddle.com/serialthreadgui。希望这就是你要找的。​​span> 这正是我想要的!感谢您的帮助!

以上是关于向工作线程PyQt发送值?的主要内容,如果未能解决你的问题,请参考以下文章

线程应用程序时随机发送 PyQt 垃圾邮件“选择:无效参数”

线程:PyQt 因“出队时队列中的未知请求”而崩溃

从主函数向线程发送信号?

pyqt从线程线程发出信号

无法让PyQt5 Designer LCD盒接收显示信号并更新显示

Android:子线程向UI主线程发送消息