pyqt调用UI和开启子进程

UI制作

qrc

注意调用UI前把样式表里绑定的资源(qrc)转换成py导入进去

 xxx.qrc转xxx.py   两种方法

1命令

pyrcc5 -o icons_rc.py icons.qrc 

2外部工具pyrcc

实参

-o $FileNameWithoutExtension$.py $FileNameWithoutExtension$.qrc

sdz.qrc→→sdaz.py

在代码里写

import sdz

1.调用UI无交互函数

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic
from PyQt5.QtCore import Qt, QPoint
import sdz      #qrc转成的py
class DraggableWindow(QWidget):def __init__(self):super().__init__()uic.loadUi("./史迪仔.ui", self)   #保存的UI名# 设置窗口标志self.setWindowFlag(Qt.FramelessWindowHint)# 设置半透明背景self.setAttribute(Qt.WA_TranslucentBackground)# 记录鼠标按下的初始位置self.offset = QPoint()def mousePressEvent(self, event):# 记录鼠标按下的初始位置self.offset = event.pos()def mouseMoveEvent(self, event):# 移动窗口位置if event.buttons() == Qt.LeftButton:self.move(self.pos() + event.pos() - self.offset)
if __name__ == '__main__':app = QApplication(sys.argv)# 创建可拖动窗口实例ui = DraggableWindow()# 显示窗口ui.show()# 启动应用程序事件循环sys.exit(app.exec_())

2.UI按钮绑定函数

pushButton_3在UI里查看

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic
from PyQt5.QtCore import Qt, QPoint
import sdz      #qrc转成的py
class guWindow(QWidget):def __init__(self):super().__init__()self.gu=uic.loadUi("./史迪仔.ui", self)               #加载UI  命名self+任意an = self.gu.pushButton_3  # 按钮an.clicked.connect(self.gumou)  # 给按钮绑定函数# ✦✦✦✦✦✦✦✦✦✦设置无边框 和可拖动✦✦✦✦✦✦✦✦✦✦✦✦✦固定代码self.gu.setWindowOpacity(0.90)  # 设置窗口透明度self.gu.setWindowFlag(Qt.FramelessWindowHint)  # 去除边框self.gu.setAttribute(Qt.WA_TranslucentBackground)  # 去除白色背景self.offset = QPoint()     # 记录鼠标按下的初始位置def mousePressEvent(self, event):self.offset = event.pos()def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton:self.move(self.pos() + event.pos() - self.offset)    # 移动窗口位置# ✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦def gumou(self):  # 按钮绑定的函数 功能print("顾某")
if __name__ == '__main__':app = QApplication(sys.argv)# 创建可拖动窗口实例ui = guWindow()        #函数# 显示窗口ui.show()# 启动应用程序事件循环sys.exit(app.exec_())

3.UI按钮绑定函数 开启子线程

在子线程运行期间 UI不卡顿

UI转换成py导入进去

 xxx.ui转xxx.py   两种方法

1.命令行

pyuic5 -o ui.py ui.ui

2.外部工具pyuic

-o $FileNameWithoutExtension$.py $FileNameWithoutExtension$.ui

调用UI 

sdz.ui已经转换为sdz.py

from sdz import Ui_Form   #UI  UI的主函数
class guWindow(QWidget):def __init__(self):super().__init__()self.gu = Ui_Form()self.gu.setupUi(self)

任务栏图标LOGO

设置logo.qrc转为logo.py

logo.qrc里不要放其他东西

<RCC><qresource><file>123.ico</file></qresource>
</RCC>

导入库

from PyQt5 import QtGui
import logo  #任务栏图标qrc
import ctypes#设置任务栏图标
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("com.example.myapp")

在主函数加上两行代码   ✦✦✦

if __name__ == '__main__':app = QApplication(sys.argv)icon = QtGui.QIcon(':/123.ico')    #✦✦✦app.setWindowIcon(icon)            #✦✦✦ui = guWindow()      

参数传递

在按钮绑定的函数中开始线程

    def gumou(self):  # 按钮绑定的函数 功能self.my_thread = MyThread(url)  # 创建线程self.my_thread.progress_updated.connect(self.update_progress)  # 连接数字信号self.my_thread.name_received.connect(self.receive_name)          # 连接文字信号self.my_thread.start()  # 开始线程

在进程中定义信号

class MyThread(QThread):progress_updated = pyqtSignal(int)    # 定义信号,传递 int 类型的参数name_received = pyqtSignal(str)       # 定义信号,传递 str 类型的参数def __init__(self,url):super().__init__()self.url = url                    #参数def run(self):try:

接收信号

    def receive_name(self, name):    #接收nameself.gu.textBrowser.clear()self.gu.textBrowser.append(name)def update_progress(self, percent): #更新数字self.gu.progressBar.setValue(percent)

完整代码


import sys
from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt, QPoint, QThread,pyqtSignal
from gui import Ui_Form   #UI
import sdz     #qrc生成的py #样式表
import logo  #任务栏图标
#设置任务栏图标
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("com.example.myapp")#子线程下载
class MyThread(QThread):progress_updated = pyqtSignal(int)    # 定义信号,传递 int 类型的参数name_received = pyqtSignal(str)       # 定义信号,传递 str 类型的参数def __init__(self,url):super().__init__()self.url = url                    #参数def run(self):try:self.name_received.emit(code)        #发送获取信号self.progress_updated.emit(percent)  # 发送下载进度信号except :self.name_received.emit(f'错误')
class guWindow(QWidget):def __init__(self):super().__init__()self.gu = Ui_Form()self.gu.setupUi(self)an = self.gu.pushButton_3  # 按钮self.gu.lineEdit.returnPressed.connect(self.gumou)    #lineEdit回车运行an.clicked.connect(self.gumou)  # 给按钮绑定函数self.user_name_qwidget = self.gu.lineEdit# ✦✦✦✦✦✦✦✦✦✦设置无边框 和可拖动✦✦✦✦✦✦✦✦✦✦✦✦✦固定代码self.setWindowOpacity(0.90)  # 设置窗口透明度self.setWindowFlag(Qt.FramelessWindowHint)  # 去除边框self.setAttribute(Qt.WA_TranslucentBackground)  # 去除白色背景self.offset = QPoint()     # 记录鼠标按下的初始位置def mousePressEvent(self, event):self.offset = event.pos()def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton:self.move(self.pos() + event.pos() - self.offset)    # 移动窗口位置def gumou(self):  # 按钮绑定的函数 功能s = self.user_name_qwidget.text()url="开始"+sself.my_thread = MyThread(url)  # 创建线程self.my_thread.progress_updated.connect(self.update_progress)  # 连接数字信号self.my_thread.name_received.connect(self.receive_name)          # 连接文字信号self.my_thread.start()  # 开始线程def receive_name(self, name):    #接收nameself.gu.textBrowser.clear()self.gu.textBrowser.append(name)def update_progress(self, percent): #更新数字self.gu.progressBar.setValue(percent)if __name__ == '__main__':app = QApplication(sys.argv)icon = QtGui.QIcon(':/ks.png')app.setWindowIcon(icon)ui = guWindow()           # 创建窗口实例ui.show()                 # 显示窗口sys.exit(app.exec_())     # 启动应用程序事件循环

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

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

相关文章

Influxdb2修改管理员密码

通过恢复管理员令牌来重置InfluxDB2管理员的密码 1.找到数据库的配置文件 一般为config.json 2.配置文件的的blod文件配置 3.在这个混合文本和二进制json文件中搜索已知的用户名或token之类的字符串。 例如&#xff1a; "id":"0bd73badf2941000","…

AI-数学-高中-3.二次函数的根的分布问题的解题方法

原作者学习视频&#xff1a;二次】3二次函数根分布问题&#xff08;中档&#xff09;_哔哩哔哩_bilibili 一、伟达定理&#xff08;根与0比较的二次函数&#xff09; 示例&#xff1a; 二、画图法&#xff1a; 1.开口方向的确定&#xff0c;有的示例可能存在向上、下两种情况…

Qt/QML编程学习之心得:Linux下读写GPIO(23)

在linux嵌入式系统中,经常需要一些底层操作,Linux就如window一样,也对底层BSP进行了封装,对device driver进行了封装,使用的话基本就是文件读写的方式来读取,所以也大大简化了上层应用对底层硬件的访问难度。 比如要对GPIO口进行访问,在Qt中有几种方法: 使用命令行方…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl

初识硬件之三极管

1 什么是三极管 概述 三极管全称是“晶体三极管”&#xff0c;也被称作“晶体管”&#xff0c;是一种具有放大功能的半导体器件。通常指本征半导体三极管&#xff0c;即BJT管。 三极管封装 有插件和贴片之分 如下图左一和左二就是插件形式&#xff0c;上面的金属片和洞孔是…

服务器中了DevicData勒索病毒怎么处理

DevicData勒索病毒是最近一段时间非常流行的勒索病毒类型&#xff0c;有很多企业都不幸中招&#xff0c;给生产和经营带来了很大的影响。所以云天数据恢复中心决定就这种类型的勒索病毒&#xff0c;来和各位讲讲当服务器中了DevicData勒索病毒怎么处理。 特征 1&#xff0c;文件…

位运算相关

简单&#xff1a; 191. 位1的个数-CSDN博客 67. 二进制求和-CSDN博客 190. 颠倒二进制位-CSDN博客 136. 只出现一次的数字-CSDN博客 中等&#xff1a;

【C语言题解】 | 101. 对称二叉树

101. 对称二叉树 101. 对称二叉树代码 101. 对称二叉树 这个题目要求判断该二叉树是否为对称二叉树&#xff0c;此题与上一题&#xff0c;即 100. 相同的树 这个题有异曲同工之妙&#xff0c;故此题可借鉴上题。 我们先传入需要判断二叉树的根节点&#xff0c;通过isSameTree()…

vue 工作记录登录后的一些好方法

//记住要跳转的地址 function handleLogin() { loginFormRef.value.validate((valid: boolean) > { if (valid) { loading.value true; userStore .login(loginData.value) .then(() > { const query: LocationQuery route.query; const redirect (query.redirect as…

logrus 打印日志时间注意事项

问题描述 程序运行中打印时间 和 logrus打印日志时间 差距十几分钟 go 日志打印处 log_init.LogIcmp.Info("Current time") 日志打印结果 {"func":"main.main","level":"info","msg":"Current time",…

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现…

C# 强制类型转换和as区别和不同使用场景

文章目录 1.强制类型转换2. as 运算符3.实例总结&#xff1a; 在C#中&#xff0c;as 和 强制类型转换&#xff08;例如 (T)value&#xff09;的主要区别在于它们处理类型转换不成功时的行为和适用场景&#xff1a; 1.强制类型转换 使用语法&#xff1a;Type variable (Type)…

Python基础知识:整理7 字典的定义及其相关操作

1 字典的定义 # 1. 字典的定义 # 定义字典的字面量 # {key: value, key: value, ......, key: value}# 定义字典变量 # my_dict {key: value, key: value, ......, key: value}# 定义空字典 # my_dict {} # my_dict dict()定义重复Key的字典 my_dict1 {"张三": …

基于JavaWeb+SSM+Vue四六级词汇微信小程序系统的设计和实现

基于JavaWebSSMVue四六级词汇微信小程序系统的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 &#xff08;1&#xff09;课题背景 伴随着社会的快速发展, 现代社…

sql查看指定时间段的数据

要查看指定时间段的数据&#xff0c;您可以使用SQL中的WHERE子句来过滤日期或时间列&#xff0c;以仅选择在指定时间段内的行。以下是一个示例查询&#xff0c;假设您有一个名为table_name的表&#xff0c;其中包含一个名为date_column的日期列&#xff1a; SELECT * FROM tab…

海康威视校园招聘笔试题

1、10、10、4、4四个数&#xff0c;怎么算出24点&#xff1f;(10*10-4)/424 2、下列表达式在32位机器编译环境下的值&#xff08;&#xff09; [cpp] view plaincopyprint? class A { }; class B { public: B(); virtual ~B(); }; class C { private…

LINUX常见问题之oom kill

一、OOM含义 OOM(Out Of Memory)机制为Linux内核中一种自我保护机制&#xff0c;当系统分配不出内存时(触发条件)会触发这个机制&#xff0c;由系统在已有进程中挑选一个占用内存较多&#xff0c;回收内存收益最大的进程杀掉来释放内存。 Linux下允许程序申请比系统可用内存更…

2024年杭州电子科技大学843信号与系统考研大纲,真题,参考书,杭电843,信息与通信

杭电 杭州电子科技大学843考研信号与系统大纲&#xff0c;真题&#xff0c;参考书&#xff0c;博睿泽信息通信考研论坛。 杭州电子科技大学 全国硕士研究生招生考试业务课考试大纲 考试科目名称&#xff1a;信号与系统 科目代码&#xff1a;843 一、信号与系统概述 1、掌握连续…

Nginx location 配置 - Part 2

接上文 链接: Nginx 简介和入门 - part1 上文 我们简单地在 nginx 创建了3个虚拟主机&#xff0c; 虽然这个3个主机都是用占用80端口 但是我们可以用不同的域名来实现区分访问3台虚拟主机。 但是&#xff0c; 实际项目上&#xff0c; 我们更加多地会使用location 配置而不是…

机器学习-线性回归实践

目标&#xff1a;使用Sklearn、numpy模块实现展现数据预处理、线性拟合、得到拟合模型&#xff0c;展现预测值与目标值&#xff0c;展现梯度下降&#xff1b; 一、导入模块 import numpy as np np.set_printoptions(precision2) from sklearn.linear_model import LinearRegr…