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.hqwc.cn/news/335906.html

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

相关文章

Python 安卓开发:Kivy、BeeWare、Flet、Flutter

kivy&#xff1a;https://github.com/kivy python-for-android &#xff1a;https://python-for-android.readthedocs.io/en/latest/ BeeWare&#xff1a;https://docs.beeware.org/en/latest/ Flet&#xff1a;https://github.com/flet-dev/flet 把 PySide6 移植到安卓上去&a…

PostgreSQL ZIP版安装完全手册

前言 ZIP免安装版下载地址&#xff1a;社区 DL 页面 (enterprisedb.com) 选择所需的版本下载即可。 安装 将下载的zip安装包&#xff08;我这里下载的是postgresql-15.5-1-windows-x64-binaries.zip&#xff09;解压至D盘根路径下&#xff0c;解压后路径&#xff1a;D:/pgsq…

[Markdown] Markdown常用快捷键分类汇总

文章目录 Markdown1、标题2、列表3、强调4、链接和图片5、代码和公式6、表格和任务列表7、引用8、分割线9、脚注10、目录11、注释12、定义 Markdown Markdown是一种轻量级的标记语言&#xff0c;可以让你用简单的语法来编写格式丰富的文档。 Markdown编辑器是一种专门用于编辑…

Java IO学习和总结(超详细)

一、理解 I/O 是输入和输出的简写&#xff0c;指的是数据在计算机内部和外部设备之间的流动。简单来说&#xff0c;当你从键盘输入数据、从鼠标选择操作&#xff0c;或者在屏幕上看到图像&#xff0c;这些都是 I/O 操作。它就像是计算机与外部世界沟通的桥梁&#xff0c;没有 I…

springboot虹软人脸识别集成

准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…

使用numpy处理图片——镜像翻转和旋转

在《使用numpy处理图片——基础操作》一文中&#xff0c;我们介绍了如何使用numpy修改图片的透明度。本文我们将介绍镜像翻转和旋转。 镜像翻转 上下翻转 from PIL import Image import numpy as np img Image.open(example.png) data np.array(img)# axis0 is vertical, a…

使用Nonebot编写QQ机器人

使用 NoneBot 这个工具&#xff0c;来编写 QQ 机器人。 安装基础软件 一、安装 NoneBot 库 直接使用 pip 安装即可 pip install nonebot二、安装酷Q 软件和 HTTP API 插件 酷Q 软件可以直接到官网下载&#xff0c;https://cqp.cc/b/news&#xff0c;或者可以到网盘下载&am…

【Databand】日期时间函数

文章目录 获取当前日期和时间日期格式化函数日期加减运算日期时间和时间戳转化日期时间各部分拆分日期时间加减运算实际应用扩展总结 获取当前日期和时间 Databend 使用 UTC 作为默认时区&#xff0c;并允许您将时区更改为当前地理位置。 -- 查看时区 select timezone(); ---…

C2-3.3.2 机器学习/深度学习——数据增强

C2-3.3.2 数据增强 参考链接 1、为什么要使用数据增强&#xff1f; ※总结最经典的一句话&#xff1a;希望模型学习的更稳健 当数据量不足时候&#xff1a; 人工智能三要素之一为数据&#xff0c;但获取大量数据成本高&#xff0c;但数据又是提高模型精度和泛化效果的重要因…

YOLOv5改进 | 2023主干篇 | EfficientViT替换Backbone(高效的视觉变换网络)

一、本文介绍 本文给大家带来的改进机制是EfficientViT(高效的视觉变换网络),EfficientViT的核心是一种轻量级的多尺度线性注意力模块,能够在只使用硬件高效操作的情况下实现全局感受野和多尺度学习。本文带来是2023年的最新版本的EfficientViT网络结构,论文题目是Effici…

重学JavaScript高级(八):ES6-ES12新增特性学习

ES6-ES12新增特性学习 ES6–对象字面量增强 属性的简写方法的简写计算属性名 let name "zhangcheng" //我想让sum作为obj的key值 let objKey "sum" let obj {//属性名的简写name//等同于name:name//方法的简写running(){}//等同于running:function()…

c++临时对象的探讨及相关性能提升

产生临时对象的情况 我们定义一个类进行测试 class tempVal { public:int v1, v2;tempVal(int v1 0, int v2 0);tempVal(const tempVal& t) :v1(t.v1), v2(t.v2) {cout << "调用拷贝构造函数" << endl;}virtual ~tempVal() {cout << "…