zoukankan      html  css  js  c++  java
  • pyqt5-多线程初步

    多线程是实现并发的一个重要手段。在GUI编程中,经常需要将耗费时间较多的任务分离出来成为一个线程,避免对主线程造成影响(造成界面无响应)。
    在Qt中,最简单的多线程主要通过继承QThread类实现,重载虚函数run()。

    class MyThread(QThread):
        #设置信号量用于输出,解决输出问题
        trigger = pyqtSignal()
        def __init__(self):
            super(RunThread, self).__init__()
        def run(self):
            #此处写线程的逻辑
        def __del__(self):
            #线程结束的时候执行的代码
            
        def set_value(src):
            #通过成员函数设置数据成员,解决输入问题
            self.data=src
    

    在Qt中,需要注意的是,线程类需要成为主线程的一个数据成员,才能正常执行。
    线程的信号量连接应该放在构造函数中进行,若放在别的地方进行可能会导致发送多次的信号发送问题。

    class Win():
        def __init__(self):
            self.worker=MyThread()
            self.worker.finished.connect(self.fun)
        def on_btn(self):
            #按下按钮之后的函数,需要开启线程的时候
            self.worker.set_value(some_val)
            #这句代码就是用于开启线程的,使用多线程调用线程的run函数,由于无法在run传入参数,所以需要另外的成员函数传入参数,避免多次开启结束进程
            #若将信号连接放在这里的话,会导致信号多次连接到某个槽
            self.worker.start()
    

    参考网站
    PyQt5学习笔记14----初识pyqt多线程操作:一个很简单的有无多线程的效果对比,这里就存在多次发送信号的问题

  • 相关阅读:
    Mysql 表分区
    Java json串生成及转bean
    ZK 样式使用
    ZK 使用jfreeChart
    Struct2 csv文件上传读取中文内容乱码
    Mysql 学习笔记
    java 调用C#webservice
    ace 后台管理模板可取之处
    Linux常用命令大全
    将图片转成base64写进hml,无需依赖本地文件
  • 原文地址:https://www.cnblogs.com/kuadoh/p/11936615.html
Copyright © 2011-2022 走看看