pyqt5 信号和槽函数以及Qthread 多线程的简单的例子

写了一个简单的例子: 包含一个主窗口和一个按钮。点击按钮时,我们将启动一个耗时的任务(在这里我们使用time.sleep来模拟)。为了不阻塞主线程,我们将在一个单独的线程中运行这个任务。同时,我们将显示一个进度条来展示任务的进度, 直接上代码

import sys  # 导入sys模块,用于访问与Python解释器相关的变量和函数
import time  # 导入time模块,用于处理时间
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QProgressBar, QVBoxLayout, QWidget  # 从PyQt5.QtWidgets模块导入需要的类
from PyQt5.QtCore import QThread, pyqtSignal  # 从PyQt5.QtCore模块导入QThread和pyqtSignal类
from PyQt5 import QtWidgets  # 导入PyQt5的QtWidgets模块class Worker(QThread):  # 定义一个Worker类,继承自QThreadprogressChanged = pyqtSignal(int)  # 定义一个名为progressChanged的信号,用于在任务进度改变时发出def run(self):  # 定义run方法,该方法在调用start方法后自动运行for i in range(101):  # 循环101次,模拟一个耗时任务time.sleep(0.1)  # 暂停0.1秒self.progressChanged.emit(i)  # 发出progressChanged信号,传递当前进度class MainWindow(QMainWindow):  # 定义一个MainWindow类,继承自QMainWindowdef __init__(self, parent=None):  # 定义构造函数super(MainWindow, self).__init__(parent)  # 调用父类的构造函数self.setWindowTitle("PyQt5 App")  # 设置窗口标题self.button = QPushButton("Start Task")  # 创建一个按钮,文本为"Start Task"self.button.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)  # 设置按钮的大小策略为Expanding,即按钮会尽可能地占用可用空间self.button.clicked.connect(self.startTask)  # 将按钮的clicked信号连接到startTask方法self.progressBar = QProgressBar()  # 创建一个进度条self.progressBar.setValue(0)  # 设置进度条的初始值为0layout = QVBoxLayout()  # 创建一个垂直布局layout.addWidget(self.button)  # 将按钮添加到布局中layout.addWidget(self.progressBar)  # 将进度条添加到布局中centralWidget = QWidget()  # 创建一个中心部件centralWidget.setLayout(layout)  # 将布局设置到中心部件self.setCentralWidget(centralWidget)  # 将中心部件设置到主窗口self.worker = Worker()  # 创建一个Worker对象self.worker.progressChanged.connect(self.progressBar.setValue)  # 将Worker的progressChanged信号连接到进度条的setValue方法def startTask(self):  # 定义startTask方法self.worker.start()  # 启动Worker线程app = QApplication(sys.argv)  # 创建一个QApplication对象
window = MainWindow()  # 创建一个MainWindow对象
window.show()  # 显示主窗口
sys.exit(app.exec_())  # 进入事件循环,等待用户操作

首先创建了一个Worker类,它是QThread的子类。这个类有一个信号progressChanged,用于在任务进度改变时发出。run方法中的循环模拟了一个耗时任务,每次迭代都会暂停0.1秒,然后发出progressChanged信号。 MainWindow类是主窗口。它包含一个按钮和一个进度条。按钮的clicked信号连接到startTask方法,该方法启动Worker线程。进度条的值由Worker的progressChanged信号控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读:Autoregressive Image Generation without Vector Quantization

这篇论文的主要内容围绕着一个核心问题:是否有必要将自回归模型与向量量化的表示方式绑定在一起,特别是在图像生成领域?作者团队来自麻省理工学院计算机科学与人工智能实验室(MIT CSAIL)、谷歌DeepMind以及清华大学&am…

力扣SQL 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II 👨‍🏫 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…

基于深度学习的图像识别技术与应用是如何?

基于深度学习的图像识别技术与应用在当今社会中扮演着越来越重要的角色。以下是对该技术与应用的详细解析: 一、技术原理 深度学习是一种模拟人脑处理和解析数据的方式的技术和方法论。在图像识别领域,深度学习主要通过深度神经网络(如卷积…

CentOS7在2024.6.30停止维护后,可替代的Linux操作系统

背景 Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。国内占有率最多的却是Centos,这是由…

最全信息收集工具集

吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 所有的攻防、渗透第一步肯定是信息收集了&#xf…

CID引流电商助力3C产品销售腾飞的实践与思考

摘要:随着互联网技术的不断发展和普及,电商行业迎来了前所未有的发展机遇。其中,CID引流电商作为一种新兴的电商模式,为商家们提供了更加精准、高效的拓客之路。尤其在3C产品领域,CID引流电商更是助力其销售腾飞的重要…

Python 学习 第四册 第10章 系统(2)

-----用教授的方式学习 目录 10.3 进程 10.3.1 使用subprocess创建进程 10.3.2 使用multiprocessing创建进程 10.3.3 使用terminate()终止进程 10.4 日期和时间 10.4.1 datetime模块 10.4.2 使用time模块 10.4.3 读写日期和时间 10.3 进程 当运行一个程序时,操…

云计算【第一阶段(18)】磁盘管理与文件系统

一、磁盘基础 磁盘(disk)是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。 早期计算机使用的磁盘是软磁盘(Floppy Disk,简称…

程序猿大战Python——面向对象——魔法方法

什么是魔法方法? 目标:了解什么是魔法方法? 魔法方法指的是:可以给Python类增加魔力的特殊方法。有两个特点: (1)总是被双下划线所包围; (2)在特殊时刻会被…

调查问卷管理系统设计文档

一、项目背景和目标 随着现代企业对市场研究的深入,调查问卷已成为获取用户反馈和市场动态的重要工具。为了高效管理问卷的创建、发布、回收和分析,我们设计了一套调查问卷管理系统。本系统的目标是提供一个功能完善、操作简便、性能稳定的平台&#xff…

MURF3040CTR-ASEMI智能AI应用MURF3040CTR

编辑:ll MURF3040CTR-ASEMI智能AI应用MURF3040CTR 型号:MURF3040CTR 品牌:ASEMI 封装:TO-220F 恢复时间:35ns 最大平均正向电流(IF):30A 最大循环峰值反向电压(VR…

CSS详解

盒子模型&#xff08;box-sizing&#xff09; line-height与height CSS选择符和可继承属性 属性选择符&#xff1a; 示例&#xff1a;a[target"_blank"] { text-decoration: none; }&#xff08;选择所有target"_blank"的<a>元素&#xff09; /* 选…

嵌入式Linux驱动开研发流程详细解析

大家好,今天主要给大家分享一下,嵌入式linux中重要的内容详解。 一、驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询、中断处理、DMA通信(CPU与外设通信的方式) 进行物理内存向虚拟内存…

Linux中find命令总结

Linux中find命令总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. find命令概述 在Linux系统中&#xff0c;find命令是一种用于在文件系统中搜索文件和目…

[已解决]ImportError: DLL load failed while importing win32api: 找不到指定的程序。

使用pip install pywin32302安装后import找不到win32api 失败尝试 上网找别人的解决方案&#xff0c;大部分解决方案都是通过复制下面两个dll文件到 下面这个文件夹&#xff0c;并且复制到C:\Windows\System32&#xff0c;从而解决问题&#xff0c;但是我没能成功。 解决方…

深度神经网络——什么是小样本学习?

引言 小样本学习是指使用极少量的训练数据来开发人工智能模型的各种算法和技术。小样本学习致力于让人工智能模型在接触相对较少的训练实例后识别和分类新数据。小样本训练与训练机器学习模型的传统方法形成鲜明对比&#xff0c;传统方法通常使用大量训练数据。小样本学习是 主…

【IC验证】UVM实验lab03

1. TLM端口的创建、例化与使用 创建&#xff1a; uvm_get_blocking_port #(fmt_trans) mon_bp_port; 例化&#xff1a; function new(string name "mcdf_refmod", uvm_component parent);super.new(name, parent);fmt_trans new("fmt_trans", this);…

解析Java中1000个常用类:Base64类,你学会了吗?

推荐一个我自己写的程序员在线工具站: http://cxytools.com 提供一站式在线工具平台,专为程序员设计,包括时间日期、JSON处理、SQL格式化、随机字符串生成、UUID生成、随机数生成、文本Hash等功能,提升开发效率。 以下是正文。 在现代软件开发中,数据的编码与解码是常见…

纤程与协程以及有栈协程和无栈协程的区别

纤程与协程区别以及有栈协程和无栈协程的区别 参考纤程与协程区别有栈协程和无栈协程有栈协程为什么需要申请内存而无栈为什么不需要 参考 当谈论协程时&#xff0c;我们在谈论什么 从无栈协程到 C异步框架&#xff08;上&#xff09; 从无栈协程到 C异步框架&#xff08;下&a…

HMI之王 STM32H7S7

还要什么自行车啊 感谢原厂精彩培训和慷慨赠板&#xff01; 以下列示几个关注的点&#xff0c;计划做成系列&#xff0c;随缘更新&#xff0c;尽量填。 0&#xff09;1024*600分辨率配5寸触屏&#xff1b;Type-C with USB 2.0 HS interface, dual‑role‑power 终于不用2根线…