首页 > 编程语言 >【python】pyqt中使用多线程处理耗时任务

【python】pyqt中使用多线程处理耗时任务

时间:2024-04-25 18:33:05浏览次数:16  
标签:__ thread python self pyqt 线程 result import 多线程

在 PyQt 中使用多线程通常是为了避免界面冻结,特别是在执行耗时的任务时。PyQt 本身是基于 Qt 的,而 Qt 不允许在除主线程之外的线程中直接操作 GUI 元素。因此,任何涉及 GUI 更新的操作都应该在主线程中执行。

import sys  
import threading  
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel  
from PyQt5.QtCore import QThread, pyqtSignal  
import time  
  
# 定义一个线程类,继承自 QThread  
class WorkerThread(QThread):  
    # 定义一个信号,用于在主线程中更新文本  
    result_ready = pyqtSignal(str)  
  
    def run(self):  
        """线程执行的函数"""  
        # 模拟一个耗时的任务  
        time.sleep(5)  
        result = "任务完成"  
        # 发出信号,通知主线程  
        self.result_ready.emit(result)  
  
  
class MainWindow(QWidget):  
    def __init__(self):  
        super().__init__()  
        self.initUI()  
  
    def initUI(self):  
        self.setWindowTitle('PyQt 多线程示例')  
        self.setGeometry(300, 300, 300, 200)  
        layout = QVBoxLayout()  
          
        self.label = QLabel('等待任务...')  
        layout.addWidget(self.label)  
          
        self.button = QPushButton('开始任务')  
        self.button.clicked.connect(self.start_task)  
        layout.addWidget(self.button)  
          
        self.setLayout(layout)  
        self.show()  
  
    def start_task(self):  
        # 创建线程实例  
        self.thread = WorkerThread()  
        # 连接线程的信号到槽函数  
        self.thread.result_ready.connect(self.on_result_ready)  
        # 启动线程  
        self.thread.start()  
  
    def on_result_ready(self, result):  
        # 在主线程中更新标签文本  
        self.label.setText(result)  
        # 线程完成后,可以确保线程被清理  
        self.thread.quit()  
        self.thread.wait()  
  
  
if __name__ == '__main__':  
    app = QApplication(sys.argv)  
    window = MainWindow()  
    sys.exit(app.exec_())

 

标签:__,thread,python,self,pyqt,线程,result,import,多线程
From: https://www.cnblogs.com/LPworld/p/18158335

相关文章

  • Python 字符串格式化指南
    前言在Python中,字符串格式化是一种常见且重要的操作,用于将变量或值插入到字符串中,并控制输出的格式。本文将介绍几种常见的字符串格式化方法,帮助大家掌握在Python中有效地处理字符串的技巧。方法一:使用%操作符格式化字符串使用%操作符是一种传统的字符串格式化方法,可......
  • 深入理解多线程编程
    title:深入理解多线程编程date:2024/4/2517:32:02updated:2024/4/2517:32:02categories:后端开发tags:线程同步互斥锁死锁避免竞态条件线程池异步编程性能优化第一章:多线程基础1.1线程概念与原理线程:在操作系统中,一个程序可以被划分为多个执行流,每个......
  • Qt 中多线程对应的信号槽
    Qt中通过moveToThread方式来实现的多线程之间数据交互一般是通过信号槽来进行的,信号槽不仅可以用于同一个线程中,也可以用于多线程之间,当用于多线程之间时,其连接方式为Qt::QueuedConnection,即队列连接。多线程之间建立的信号槽主要为如下两个:主线程发送信号:来触发子线程的......
  • Python GUI开发- Qt Designer环境搭建
    前言QtDesigner是PyQt5程序UI界面的实现工具,使用QtDesigner可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用环境准备使用pip安装pipinstallpyqt5-toolsQtDesigner环境搭建在pip安装包的路径中,找到designer.exe文件......
  • Python3.8.4 解决 ImportError: urllib3 v2 only supports OpenSSL 1.1.1+, currently
    系统版本:CentOSLinuxrelease7.6.1810(Core)编译安装Python3.8.4[root@hankyoon~]#tar-xvfPython-3.8.4.tgz[root@hankyoon~]#cdPython-3.8.4/[root@hankyoon~]#./configure--prefix=/usr/local/python3.8[root@hankyoon~]#make&&makeinstall[......
  • 实践探讨Python如何进行异常处理与日志记录
    本文分享自华为云社区《Python异常处理与日志记录构建稳健可靠的应用》,作者:柠檬味拥抱。异常处理和日志记录是编写可靠且易于维护的软件应用程序中至关重要的组成部分。Python提供了强大的异常处理机制和灵活的日志记录功能,使开发人员能够更轻松地管理代码中的错误和跟踪应用程序......
  • python读取yaml配置文件的方法
    yaml简介1.yaml[ˈjæməl]:YetAnotherMarkupLanguage:另一种标记语言。yaml是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式2.yaml基本语法规则:大小写敏感使用缩进表示层级关系缩进时不允许使用Ta......
  • Python 彩色字体输出
    使用ANSI转译码给print添加颜色公式'\033[显示方式;字体颜色;背景色m输出内容\033[0m'公式参数解析\033:ANSI转义序列开始标识[:控制码用于控制字体方式、颜色、背景色(控制码对应参数值是唯一的所以仅设置一个参数时其他参数可以省略不用空占用)m:控制码结束标......
  • Python的Spacy
    spaCy是一个基于Python编写的开源自然语言处理库。基于自然处理领域的最新研究,spaCy提供了一系列高效且易用的工具,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。安装pipinstallspacy查看版本importspacyprint(spacy.__version__)......
  • python 一个开箱即用的多线程代码
    适合数据采集的多线程代码!#coding=utf-8#coding=gbk#coding=gb2312importrequestsimportthreadingimportqueuedefget_response(source):returnresponsedefdecode(source,response):##保存数据passdefmains():whileTrue:......