【PyQt】

PyQT5线程基础(2)

  • 线程案例
    • 案例一
    • 案例二

线程案例

案例一

案例一代码通过线程实现点击按钮向线程传输地址,程序等待20秒后,返回结果。
通过QtDesigner创建如下图所示的界面ui,并用UIC工具转成对应的py文件。
在这里插入图片描述
Ui_test文件如下:

from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(448, 325)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.psb_start = QtWidgets.QPushButton(self.centralwidget)self.psb_start.setGeometry(QtCore.QRect(110, 120, 191, 81))self.psb_start.setObjectName("psb_start")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 448, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.psb_start.setText(_translate("MainWindow", "开始"))

main文件,其中代码如下:

from Ui_test import Ui_MainWindow
from PyQt5.QtWidgets import *
import sys
import time
from threads import MyThreadclass MainWindow(QMainWindow, Ui_MainWindow):def __init__(self, parent=None):super(MainWindow, self).__init__(parent)self.setupUi(self)self.psb_start.clicked.connect(self.button_start)def button_start(self):print("button_start clicked")self.psb_start.setChecked(True)self.psb_start.setDisabled(True)self.th = MyThread(ip='192.168.1.1',port=4000)self.th.finishSignal.connect(self.button_finish)self.th.start()def button_finish(self,msg):print("msg:{}".format(msg))# time.sleep(20)self.psb_start.setDisabled(False)self.psb_start.setChecked(False)if __name__ == '__main__':app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

threads文件,其中代码如下:

import time
from PyQt5.QtCore import *class MyThread(QThread):finishSignal = pyqtSignal(str)def __init__(self, ip, port, parent=None):super(MyThread, self).__init__(parent)self.ip = ipself.port = portdef run(self):print('======sleep========ip:{},port{}'.format(self.ip, self.port))time.sleep(20)self.finishSignal.emit('this is a test')return

案例二

案例二通过线程实现用按钮控制进度条。
通过QtDesigner创建如下图所示的界面ui。
在这里插入图片描述

mainwindow文件,其中代码如下:

from PyQt5 import QtCore,QtWidgets,QtGui
from PyQt5 import uic
import sys,timeclass MyWindow(QtWidgets.QMainWindow):def __init__(self):QtWidgets.QMainWindow.__init__(self)self.ui = uic.loadUi(r"E:\chap\ex\test_thread\ex03\ex03.ui",self)self.resize(888,200)self.thread ={}self.pushButton.clicked.connect(self.start_work1)self.pushButton_2.clicked.connect(self.start_work2)self.pushButton_3.clicked.connect(self.start_work3)self.pushButton_4.clicked.connect(self.stop_work1)self.pushButton_5.clicked.connect(self.stop_work2)self.pushButton_6.clicked.connect(self.stop_work3)def start_work1(self):self.thread[1] = MyThread(parent=None,index=1)self.thread[1].start()self.thread[1].any_singal.connect(self.my_function)self.pushButton.setEnabled(False)def start_work2(self):self.thread[2] = MyThread(parent=None,index=2)self.thread[2].start()self.thread[2].any_singal.connect(self.my_function)self.pushButton_2.setEnabled(False)def start_work3(self):self.thread[3] = MyThread(parent=None,index=3)self.thread[3].start()self.thread[3].any_singal.connect(self.my_function)self.pushButton_3.setEnabled(False)def stop_work1(self):self.thread[1].stop()self.pushButton.setEnabled(True)def stop_work2(self):self.thread[2].stop()self.pushButton_2.setEnabled(True)def stop_work3(self):self.thread[3].stop()self.pushButton_3.setEnabled(True)def my_function(self,count):cnt = countindex = self.sender().indexif index == 1:self.progressBar.setValue(cnt)if index == 2:self.progressBar_2.setValue(cnt)if index == 3:self.progressBar_3.setValue(cnt)class MyThread(QtCore.QThread):any_singal = QtCore.pyqtSignal(int)def __init__(self, parent=None, index=0):super(MyThread, self).__init__(parent)self.index = indexself.is_runing = Truedef run(self):print("开始线程",self.index)cnt = 0while True:cnt +=1if cnt ==99:cnt=0time.sleep(0.01)self.any_singal.emit(cnt)def stop(self):self.is_runing = Falseprint("结束线程",self.index)self.terminate()app = QtWidgets.QApplication(sys.argv)
mainwindow = MyWindow()
mainwindow.show()
sys.exit(app.exec_())

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

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

相关文章

SpringBoot实现图形验证码

目录 项目创建 前端代码实现 约定前后端交互接口 需求分析 接口定义 Hutool工具 实现服务器端代码 引入依赖 获取验证码 验证码校验 调整前端代码 随着安全性的要求越来越高,目前许多项目中都使用了验证码,验证码也有各种类型,如 …

Win11鼠标卡顿 - 解决方案

问题 使用Win11系统使,鼠标点击任务栏的控制中心(如下图)时,鼠标会有3秒左右的卡顿,同时整个显示屏幕也有一定程度的卡顿。 问题原因 排除鼠标问题:更换过不同类型的鼠标,以及不同的连接方式…

MT6825磁编码IC在智能双旋机器人中的应用

MT6825磁编码IC在智能双旋机器人中的应用,无疑为这一领域的创新和发展注入了新的活力。作为一款高性能的磁性位置传感器,MT6825以其独特的优势,在智能双旋机器人的运动控制、定位精度以及系统稳定性等方面发挥了关键作用。 www.abitions.com …

Jenkins 离线升级

1. 环境说明 环境 A: jenkins 版本:2.253使用 systemctl 管理的 jenkins 服务 环境 B: 可以上网的机器,装有 docker-compose docker 和 docker-compose 安装,这里都略了。 2. 安装旧版本 2.1 环境 A jenkins 目录打包文件 …

科普文:信创国产数据库兼容性一览

1. 常见国产数据库兼容性一览 让我们先从一张《数据库库兼容性一览表》开始,谈谈各家兼容性。 图片上传失败,csdn一直提示上传图片过于频繁 ❖ 兼容对象 在兼容对象上,大部分产品都将Oracle、MySQL、PostgreSQL作为兼容对象,部…

论文翻译:通过云计算对联网多智能体系统进行预测控制

通过云计算对联网多智能体系统进行预测控制 文章目录 通过云计算对联网多智能体系统进行预测控制摘要前言通过云计算实现联网的多智能体控制系统网络化多智能体系统的云预测控制器设计云预测控制系统的稳定性和一致性分析例子结论 摘要 本文研究了基于云计算的网络化多智能体预…

服务器操作集合

服务器使用PC作为代理访问外网 1、PC上启动代理,比如nginx 下载nginx:http://nginx.org/en/download.html 修改配置文件,在conf下: http {include mime.types;default_type application/octet-stream;sendfile o…

[BJDCTF2020]EzPHP1

知识点:1. url编码绕过 2. %0a绕过 3. post优先级绕过 4. php伪协议 5. 数组的强类型比较绕过 6. 取反绕过 进入之后发现了一个很帅气的页面😎~ 看看网页源代码试试~ 是base32编码,尝试一下解码. https://www.qqxiuzi.cn/bianma/base.php 解…

Qt实现MDI应用程序

本文记录Qt实现MDI应用程序的相关操作实现 目录 1.MDM模式下窗口的显示两种模式 1.1TabbedView 页签化显示 1.2 SubWindowView 子窗体显示 堆叠cascadeSubWindows 平铺tileSubWindows 2.MDM模式实现记录 2.1. 窗体继承自QMainWindow 2.2.增加组件MdiArea 2.3.定义统一…

Ubuntu18.04安装ROS

1.添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.listcurl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc输入指令:curl -s https:…

基于IDEA的Lombok插件安装及简单使用

lombok介绍 Lombok能以注解形式来简化java代码,提高开发效率。开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护。而Lombok能通过注解的方式,在编译…

acrobat 中 PDF 复制时不能精确选中所选内容所在行的一种解决方法

现象:划取行的时候,自动扩展为多行 如果整段选中复制,粘贴后是乱码 解决步骤 识别完,保存 验证 可以按行复制了。 如果遇到仅使用 acrobat OCR 不能彻底解决的,更换其他自己熟悉的进行 OCR。

springboot 适配ARM 架构

下载对应的maven https://hub.docker.com/_/maven/tags?page&page_size&ordering&name3.5.3-alpinedocker pull maven:3.5.3-alpinesha256:4c4e266aacf8ea6976b52df8467134b9f628cfed347c2f6aaf9e6aff832f7c45 2、下载对应的jdk https://hub.docker.com/_/o…

路网双线合并单线——ArcGISpro 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义:具有不同流向、不同平面结构的道路。此外,车道数较多的道路(例如,双黄实线车道数大于4的道路)也可以视为双线路网,本…

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…

docker inspect 如何提取容器的ip和端口 网络信息?

目录 通过原生Linux命令过滤找到IP 通过jq工具找到IP 使用docker -f 的过滤&#xff08;模板&#xff09; 查找端口映射信息 查看容器内部细节 docker inspect 容器ID或容器名 通过原生Linux命令过滤找到IP 通过jq工具找到IP jq 是一个轻量级且灵活的命令行工具&#xf…

C语言 ——— 调试的时候如何查看当前程序的变量信息

目录 调试前/后的调试窗口 ​编辑 调试窗口 --- 监视 调试窗口 --- 内存 调试窗口 --- 调用堆栈 调试前/后的调试窗口 调试前的调试窗口&#xff1a; 调试前的调试窗口是没有显示的&#xff0c;只有在调试的时候才会有相对应的调试窗口 调试后的调试窗口&#xff1a…

基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现

注&#xff1a;每个学校每个老师对论文的格式要求不一样&#xff0c;故本论文只供参考&#xff0c;本论文页数达到60页以上&#xff0c;字数在6000及以上。 基于SpringBootVueJS微信小程序技术的图书森林共享小程序设计与实现 目录 基于SpringBootVueJS微信小程序技术的图书森…

AI算法16-贝叶斯线性回归算法Bayesian Linear Regression | BLR

贝叶斯线性回归算法简介 频率主义线性回归概述 线性回归的频率主义观点可能你已经学过了&#xff1a;该模型假定因变量&#xff08;y&#xff09;是权重乘以一组自变量&#xff08;x&#xff09;的线性组合。完整的公式还包含一个误差项以解释随机采样噪声。如有两个自变量时…

2024Datawhale AI夏令营---基于术语词典干预的机器翻译挑战赛--学习笔记

#Datawhale #NLP 1.背景介绍&#xff1a; 机器翻译&#xff08;Machine Translation&#xff0c;简称MT&#xff09;是自然语言处理领域的一个重要分支&#xff0c;其目标是将一种语言的文本自动转换为另一种语言的文本。机器翻译的发展可以追溯到20世纪50年代&#xff0c;经历…