pyqt5从子目录加载qrc文件_实战PyQt5: 045-添加资源文件

e39e56b2-db72-4615-81fe-a719e4b3e0c2

添加资源文件

在使用PyQt进行图形界面开发的时候不免要用到一些外部资源,比如图片,qss配置文件等。在前面代码中,遇到这类问题,我们使用绝对路径的方式来解决,这种方式,本身有其不方便之处(比如,调整图片路径后,对应代码需要修改,代码的维护性变差), 还有在app进行打包发布的时候,通常图片资源却不方便处理,app安装的时候还必须确保app可以正确地找到这些资源,还有出于保护一些资源文件的出发,不便于直接发布图片,qss资源等等。

为解决这些问题,我们可以使用Qt官方提供的工具将这些资源文件编译成二进制文件,直接打包到程序中。为了编译这些资源文件,通常我们需要在代码目录下创建一个.qrc后缀的文件,为了叙述方便,我们假设这个文件的名字为resource.qrc,它和我们主py文件位于同一个目录。

一个 .qrc 资源集合文件是用来指定文件将被嵌入其资源的 XML 文件。根节点为 RCC ,里面可以包含若干 qresource 节点,每个 qresource 有自己的 prefix(路径前缀)属性,qresource 节点包含了若干 file 节点,描述了各个文件相对于 .qrc 的路径。在 C++ Qt 的 IDE 中,我们添加资源后他会自动编译出二进制文件。但在 PyQt 中,我们需要手动来完成这些操作。

在resource.qrc输入以下内容:

        

上面就是一个qrc文件的基本框架,假设我们需要使用一个在res下名为use-python.gif的动画文件,在qresource 项之间插入

res/use-python.gif/file>

这时的resource.qrc文件如下所示

            res/use-python.gif    

编译资源文件

述资源文件并不能直接使用, 需要将其转换成对应的py文件才能导入,转换命令如下:

pyrcc5  -o rosource_rc.py resource.qrc# rosource_rc.py为转换生成的包含资源信息的py文件# resource.qrc 为我们所写的XML资源文件

在VS Code中,我们可以借助插件PYQT Intergration提供的菜单来转换(需要先配置好 rcc 的路径) :

92ab7fc85f3e447f8778895ff3293665

使用该插件在 .qrc 文件上右键,选择编译资源文件:

cb8a0a8ca87e4564bed067d057ea5f27

编译结果如下:

ba99a85048d74514a7785a902ed42c4b

使用时, 在代码中先导入编译出来的py文件:

import resource_rc

在引用.qrc 资源中的文件时,路径为:冒号+prefix路径前缀+file相对路径

self.movie = QMovie(":/res/use-python.gif")

资源文件加载测试

创建文件loadresourec.py, 播放use-python.gif,这次不使用绝对路径加载文件,而是使用资源加载的方式来实现。

resource.qrc文件内容如下:

            res/use-python.gif    

loadresourec.py完整代码如下:

import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QVBoxLayout)from PyQt5.QtGui import QMoviefrom PyQt5.QtCore import Qt, QSizeimport resource_rc class DemoLoadResource(QWidget):     def __init__(self, parent=None):        super(DemoLoadResource, self).__init__(parent)                # 设置窗口标题        self.setWindowTitle("实战PyQt5: LoadResource Demo!")              # 设置窗口大小        self.resize(400, 300)                self.initUi()        def initUi(self):        vLayout = QVBoxLayout(self)                self.movie = QMovie(":/res/use-python.gif")        self.disp_gif = QLabel(self)        self.disp_gif.setMovie(self.movie)                vLayout.addWidget(self.disp_gif)        self.movie.start()                self.setLayout(vLayout)     def resizeEvent(self, event):          newSize = self.disp_gif.size()        newSize.setWidth(newSize.width() - 32)        newSize.setHeight(newSize.height() - 32)        self.movie.setScaledSize(newSize)        super(DemoLoadResource, self).resizeEvent(event)               if __name__ == '__main__':    app = QApplication(sys.argv)    window = DemoLoadResource()    window.show()    sys.exit(app.exec()) 

运行结果如下图:

d76253c733654ac992e6075ef3c82a25

自定义资源加载测试

本文知识点

  • 构建一个自定义资源文件;
  • 将自定义资源文件转换成对应的py文件;
  • 加载自定义资源文件;
  • 重载resizeEvent()事件,获得尺寸变化信息。

喜欢本文内容就收藏,点赞,评论,关注和转发。

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

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

相关文章

西门子ddc_铁门关西门子两通电动阀VVF42.25-10C+SKD60西

铁门关西门子两通电动阀西SIEMENS/西门子电动温控阀、控制箱、电动蝶阀、电动球阀、超声波热量表、超声波流量计、电磁流量计阀体灰口铸铁 EN-GJL-2502.霍尼韦尔主营:楼宇资料系统、热网自控系统、风机盘管电动两通阀、空气压差开关、水流开关、电动执行器、风阀执行…

JS-键盘事件之方向键移动元素

注意三点&#xff1a; 1&#xff1a;事件名称onkeydown。 2&#xff1a;事件加给document&#xff0c;而非window。 3&#xff1a; 把元素的top&#xff0c;left值分别用offsetTop&#xff0c;offsetLeft来设定。 <!DOCTYPE html> <html><head><meta char…

Swift学习字符串、数组、字典

一.字符串的使用 let wiseWords "\"I am a handsome\"-boy" var emptyString "" if emptyString.isEmpty{ println("这是一个空值") }简单说明&#xff1a;isEmpty方法是用来判断字符串是否为空值的&#xff0c;之后会执行if语句中的…

python对excel操作简书_Python读写Excel表格,就是这么简单粗暴又好用

最近在做一些数据处理和计算的工作&#xff0c;因为数据是以.CSV格式保存的&#xff0c;因此刚开始直接用Excel来处理。 但是做着做着发现重复的劳动&#xff0c;其实并没有多大的意义&#xff0c;于是就想着写个小工具帮着处理。 以前正好在一本书上看到过&#xff0c;使用Pyt…

halcon/c++接口基础 之 halcon初认识

从今天开始&#xff0c;开始更新博客&#xff0c;主要分享自己最近正在翻译的Halcon/C教程。先给出第一篇文章&#xff0c;由于此文章&#xff0c;是用latex写的&#xff0c;直接导成html&#xff0c;保存在七牛云存储上&#xff0c;所以直接点击链接就看到&#xff0c;后面我将…

指数型组织形成的 9 大驱动因素

指数时代&#xff0c;是一个前所未有的激动人心的世界。 Airbnb, 谷歌, 亚马逊和GitHub这些知名的公司&#xff0c;都有一个让人称羡的共同点&#xff0c;那就是——他们都是非常成功的指数型组织&#xff08;Exponential Organizations&#xff0c;ExO’s&#xff09;。 “在当…

mysqld:表mysql.plugin不存在_99%测试工程师不知道的数据库知识|干货

点击上方“蓝字”关注我们数据库&#xff0c;简而言之可视为电子化的文件柜——存储电子文件的处所&#xff0c;用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立…

Windows Phone 执行模型概述

Windows Phone 执行模型控制在 Windows Phone 上运行的应用程序的生命周期&#xff0c;该过程从启动应用程序开始&#xff0c;直至应用程序终止。 该执行模型旨在始终为最终用户提供快速响应的体验。为此&#xff0c;在任何给定时间内&#xff0c;Windows Phone 仅允许一个应用…

halcon/c++接口基础 之 构造函数与Halcon算子

Halcon/C提供了构造函数&#xff0c;主要基于适合的Halcon算子。比如说HImage和HBarCode基于read_image and create_bar_code_model。 请注意当前的Halcon版本针对不同的算子构造函数的功能不同。如下我们介绍了一些最常用的Halcon算子&#xff0c;而一个完整的构造函数列表可…

bat自动输入用户名和密码_「小白到大牛之路6」交换机后台管理之重复输入用户名和密码...

项目需求解决项目5中存在的问题&#xff1a;用户名和密码只能输入一次。如果输入错误&#xff0c;就没有机会重新输入。项目实现#include int main(void) {// 定义变量&#xff0c;用来表示用户名和密码char name[32];char password[16];//输入用户名和密码while (1) {// 输入用…

halcon/c++接口基础 之 析构函数和Halcon算子

所有的HALCON/C类都提供了默认的析构函数用来自动销毁对应的内存。对于某些类&#xff0c;析构函数基于适合的算子&#xff1a; Windows: HWindow类的析构函数基于close_window关闭窗口。注意&#xff1a;算子本身不是析构器。你可以选择调用CloseWindow关闭窗口&#xff0c;…

ios 上传图片到阿里云的oss_JEECG BOOT 上传如何同时支持阿里OSS、Minio、本地存储

Jeecg-Boot 提供了文件及图片上传功能&#xff0c;前两个文件已介绍了MinIO和OSS配置&#xff0c;现在可根据需要选择上传方式。文件上传接口(图片/文件)在yml文件中可切换图片/文件存储方式访问路径上送参数说明在yml文件中可切换图片/文件存储方式local为本地存储minio为使用…

halcon/c++接口基础 之内存管理

所有的HALCON类&#xff0c;不仅仅HImage,HRegion,HTuple&#xff0c;HFramegrabber等等&#xff0c;还有面向过程的方法中使用的Hobject&#xff0c;都可以使用默认的析构器自动释放内存。 &#xff08; see also section 2.4 “Destructors and Halcon Operators”)&#xf…

python时间格式_python 格式化日期

常用的时间函数如下 获取当前日期&#xff1a;time.time() 获取元组形式的时间戳&#xff1a;time.local(time.time()) 格式化日期的函数(基于元组的形式进行格式化)&#xff1a; &#xff08;1&#xff09;time.asctime(time.local(time.time())) &#xff08;2&#xff09;ti…

halcon/c++接口基础 之异常处理

关于运行错误&#xff0c;HALCON/C默认打印错误信息并且终止程序。然而在某些应用中&#xff0c;放宽这个法则可能更有用。比如&#xff0c;如果一个应用要求用户交互式地指定一个图像文件读取&#xff0c;如果因为用户不能拼错文件名而终止程序的话&#xff0c;会很不方便。因…

SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件&#xff0c;或某一个目录下的所有改变。方法就是在想要提交的项目下点右键&#xff0c;然后SVN Commit...&#xff0c;就可以看到如下界面 ②日…

dat文件打开乱码_5.2 实战1:解决在Linux下打开Windows汉字文本的乱码问题

今天MK继续来分享linux的学习文章&#xff0c;今天讲的主要是实战部分。1&#xff0e;实验环境&#xff1a;CentOS 7.5 现在系统默认使用的语言是汉语。&#xff08;系统中必须安装好中文包&#xff09;。2&#xff0e;在windows系统上编辑名字为“a此文件在windows下打开正常-…

整理:深度学习 vs 机器学习 vs 模式识别

发表于2015-03-24 22:58| 11934次阅读| 来源个人博客| 26 条评论| 作者Tomasz Malisiewicz 模式识别深度学习机器学习数据科学家摘要&#xff1a;本文我们来关注下三个非常相关的概念&#xff08;深度学习、机器学习和模式识别&#xff09;&#xff0c;以及他们与2015年最热门的…

halcon/c++接口基础 之 HALCON图像变量类

在HALCON/C中&#xff0c;HObject是一个基类&#xff0c;可以表示图像变量。另外还有三种类继承自HObject. Class HImage 处理图像Class HRegion 处理区域Class HXLD 处理多边形 Regions 一个region是图像平面坐标点的集合。这样一个区域不需要被连通&#xff0c;而且可能还…

新手求大神,有其他swit-case的思路写这个程序么?

两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路____待解决)if_else if:可以处理范围计算. switch(变量) { case 变量: break; } switch括号中的"变量…