Pyqt5:多线程任务、窗体打开、常用控件介绍(含基础Demo)

news2024/9/26 1:23:30

一、多线程任务和第二窗体打开demo

【main】

import untitled
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = untitled.Ui_MainWindow()#也可能是Ui_Form/Ui_widget这里填写的是生成的类名
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

【untitled.py】

# -*- coding: utf-8 -*-
import time

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal


class Ui_MainWindow(object):
    def __init__(self):
        super().__init__()


    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("ril.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(300, 150, 181, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.open_new_window)
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(30, 440, 741, 51))
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(290, 260, 201, 28))
        self.pushButton_2.setObjectName("pushButton_2")

        MainWindow.setCentralWidget(self.centralwidget)

        self.worker = WorkerThread()  # 创建WorkerThread实例
        self.worker.progress.connect(self.update_progress)  # 多线程连接进度条
        self.pushButton_2.clicked.connect(self.worker.start) # 开始按钮连接多线程


        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "点击我打开另一个窗体"))
        self.pushButton_2.setText(_translate("MainWindow", "点击我,执行多线程任务"))

    def open_new_window(self):
        import Form2
        # 创建新的子窗口
        self.new_window = Form2.Form2()  # 使用 Form2 类
        self.new_window.setWindowTitle("一个新的窗体")
        self.new_window.show()  # 显示新窗体

    def update_progress(self, value):#设置进度条的值
        self.progressBar.setValue(value)

class WorkerThread(QThread):  #多线程任务
    progress = pyqtSignal(int)  # 自定义信号用于发送进度

    def run(self):
        for i in range(1, 6):
            time.sleep(i)  # 模拟耗时操作
            self.progress.emit(i * 20)  # 发送当前进度
            print(f"任务{i}完成了")
        self.progress.emit(100)  # 任务全部完成

【Form2】

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Form2.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets



class Form2(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 初始化界面

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(571, 345)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(180, 90, 281, 161))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(36)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "子窗体"))

【效果图】

运行main.py函数,点击打开窗体即打开Form2,点击多线程任务即可实现多线程任务。

 

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

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

相关文章

网络各层的安全实例:从物理层到应用层的保护

在前面的各节中,我们学习了利用密码学技术实现机密性、完整性、数字签名和实体鉴别等安全服务的基本方法。在本节中,我们将讨论这些方法在网络各层的具体应用实例。这些安全应用实例涉及从物理层到应用层的所有层次。 1. 为什么需要在网络各层提供安全服…

企业级NoSql数据库 --- Redis集群

什么是 redis ? Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memc…

Day18_Netty

文章目录 NettyIO 模型Java有哪些数据类型零拷贝深拷贝和浅拷贝的区别是什么?BIO、NIO、AIO的区别是什么?Netty 是什么?Netty 基于 NIO,那为啥不直接用 NIO 呢? / 为什么要用 Netty?Netty 应用场景了解么?那些开源项目用到了 Netty?Netty的核心组件是什么?请解释Netty…

【LwIP源码学习笔记1】LwIP网络接口管理

netif结构体 netif是Lwip抽象出来的网卡,结构体的声明在Lwip/include/lwip/netif.h文件中。 Lwip将每个用netif描述的网卡连接成一个链表(单向链表)。 以下是在netif.h头文件中定义的一些netif的操作函数 struct netif *netif_add_noaddr(s…

SpringBoot整合策略模式之基于 ApplicationContextAware + 枚举类实现

文章目录 1、ILog2、LogType 枚举类3、DemoController4、application.properties5、DesignDemoApplication 1、ILog package com.atguigu.design.demo.spring; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; imp…

Nginx学习(第二天)

一.Nginx高级配置 1.1 Nginx状态页 基于nginx 模块 ngx_http_stub_status_module 实现, 在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module 否则配置完成之后监测会是提示法错误 注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态 …

PeriodWave: Multi-Period Flow Matching for High-Fidelity Waveform Generation

preprintKorea Seoul, Korea 文章目录 abstractmethodFlow Matching for Waveform GenerationHigh-frequency Information Modeling for Flow Matching demo page, PeriodWave 三者最好,而且能把原声中的噪声去掉,GAN一类声码器做不到的。 Pe…

vllm 部署GLM4模型进行 Zero-Shot 文本分类实验,让大模型给出分类原因,准确率可提高6%

文章目录 简介数据集实验设置数据集转换模型推理评估 简介 本文记录了使用 vllm 部署 GLM4-9B-Chat 模型进行 Zero-Shot 文本分类的实验过程与结果。通过对 AG_News 数据集的测试,研究发现大模型在直接进行分类时的准确率为 77%。然而,让模型给出分类原…

地理空间数据分析技巧:优化的热点分析与异常值分析的应用

热点分析作为一种常用的空间统计方法,能够帮助我们识别地理空间中的热点和冷点区域,即那些高值或低值集中出现的地方。而优化的热点分析进一步简化了这一过程,使用户无需手动调整参数即可获得可靠的结果。此外,异常值分析则专注于…

wooyu漏洞库YYDS!!!入门之道:重现乌云漏洞库

目录 wooyun乌云漏洞库搭建 1、搭建资料 文件结构分析: ​编辑2、搭建过程 2.1、搭建wooyun网站 2.2、配置数据库 2.2.1、修改数据库配置文件conn.php 2.2.2、创建wooyun数据库,并解压数据库文件 2.2.3、连接数据库(数据库默认连接密…

信号与系统——定义与分类(1)

一、信号与系统 信号:信号是信息的表现形式或传送载体,例如电磁波。信号可以用一个函数 yx (t) 来表示。 系统:是指若干相互关联的事物组合而成,具有特定功能的整体。换句话说就是,系统就是对输入信号进行加工和处理&#xff0c…

Nginx: 反向代理和动静分离概述

反向代理 反向代理服务器介于用户和真实服务器之间,提供请求和响应的中转服务对于用户而言,访问反向代理服务器就是访问真实服务器反向代理可以有效降低服务器的负载消耗,提升效率 1 )反向代理的模型 现在我们有一个用户和真实服…

新版cubemx生成CMake工程浮点数打印问题记录

问题现象 解决方案 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --specsnano.specs -u _printf_float")参考Cortex-M4权威指南 重新下载和测试

[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解

目录 1.打怪1.题目链接2.算法原理详解 && 代码实现 2.判断是不是平衡二叉树1.题目链接2.算法原理详解 && 代码实现 3.最大子矩阵1.题目链接2.算法原理详解 && 代码实现 1.打怪 1.题目链接 打怪 2.算法原理详解 && 代码实现 自己的版本&…

C++ 设计模式——代理模式

C 设计模式——代理模式 C 设计模式——代理模式1. 主要组成成分2. 逐步构建代理模式2.1 抽象主题类定义2.2 真实主题类实现2.3 代理类实现2.4 主函数 3. 代理模式 UML 图代理模式 UML 图解析 4. 代理模式的优点5. 代理模式的缺点6. 代理模式的分类7. 代理模式和装饰者模式比较…

MybatisPlus:实现分页效果并解决错误:cant found IPage for args

我们在做开发使用mybatisplus 做分页查询的时候遇到了个问题: 继承 IPage拦截没有作用会默认分页,这个时候报了cant found IPage for args 错误~~~ 我们分析了下,其实这个问题很简单,是因为没有给默认值赋值,因为查询…

日撸Java三百行(day35:图的m着色问题)

目录 一、问题描述 二、思路分析 三、代码实现 总结 一、问题描述 在高中学习排列组合的时候,有一个非常经典的问题,就是涂色问题,即用m种颜色给n块区域涂色,要求每块区域只能涂同一种颜色且相邻区域的颜色不能相同&#xff…

pyinstaller将python程序打包成exe文件

将python代码打包成exe文件可以在不安装python环境的情况下直接运行python代码,譬如自己在自己的电脑上写好了代码,想发给其他人使用,可以用下述方法将python程序打包成exe文件,其他人直接执行exe文件即可使用该程序。 1.安装pyi…

二叉搜索树:数据结构之美

目录 引言基础知识 定义性质操作详解 插入节点删除节点查找节点遍历 前序遍历中序遍历后序遍历高级主题 平衡问题AVL树简介应用案例总结 引言 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它的每个节点具有以下性质:左子树上的所有节点的键…

Python数据采集与网络爬虫技术实训室解决方案

在大数据与人工智能时代,数据采集与分析已成为企业决策、市场洞察、产品创新等领域不可或缺的一环。而Python,作为一门高效、易学的编程语言,凭借其强大的库支持和广泛的应用场景,在数据采集与网络爬虫领域展现出了非凡的潜力。唯…