PyQt5简易入门指南03,使用资源文件和设计师
几个小小的修改
在上一章中,我通过一个简单的图片loader给同学们简单地讲解了pyqt5的信号与槽机制。在这一章中,我将对这个小程序进行一些简单的升级,通过这些修改,将告诉同学们如何在pyqt5中使用Qt设计师和Qt的资源文件。
修改后的程序增加了主窗口的图标,并且在程序主界面添加了一个“about”按钮。
当点击“about”按钮后会弹出一个对话框。
在点击对话框的“ok”按钮后,对话框关闭。
1.pyqt中的资源文件
首先在项目的根目录下新建一个名为“res”的目录用来存放程序中需要用到的资源文件。在这个简单例子中,只用到了一个名为“snow.ico”的图片文件,我们先将它拷贝到“res”的目录下。
之后在eric6环境中,我们来到资源的视图下,在鼠标右键弹出的菜单中选中”新建资源”选项,新建一个qrc资源文件,在这个例子中,将它命名为”chp3”,这将产生一个“chp3.qrc”的文件,内容如下:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
</qresource>
</RCC>
添加资源文件我们需要手动添加,过程很简单,在“qresource”标签中间添加如下标签即可:
<file>路径名/资源文件名</file>
在这个例子中,chp3.qrc中的内容应该是这样的:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource><file>res/snow.ico</file>
</qresource>
</RCC>
在eric6中对这个资源文件执行编译,如果没有错误,在项目中会出现一个“chp3_rc.py”的文件,在“main.py”中通过import语句对这个文件进行导入(导入一次即可,在其它地方如果也用到了相应的资源,无需再次导入)。从而就可以像Qt c++一样来使用qrc资源了。
2.使用Qt设计师
在eric6中首先找到Qt设计师窗体的视图,之后在右键的菜单中选择“新建窗体” 选项。在选择窗体的类型之后,就出现了同学们非常熟悉的Qt设计师的主界面。关于Qt设计师的使用方法,同学们可以自行网上查阅,在pyqt5中窗体的设计与Qt c++是一模一样的。在设计师中创建完窗体后保存为“.ui”后缀的文件。在这个例子中,文件名为“diaAbout.ui”。
在eric6中对这个文件进行编译,如果没有错误,在项目的目录中会出现一个以“Ui”打头的py文件,这个就是经过编译后的UI窗体,我们可以通过import语句对它进行导入。在例子中,这个文件为“Ui_diaAbout.py”。在需要用到这个模块的文件中通过以下语句进行导入:
from Ui_diaAbout import Ui_Dialog
要想使用这个窗体模块我们需要一个自定义的类。在这个例子中这个类的声明如下:
class DiaAbout(QDialog):
因为在创建窗体时选择的窗体类型为“对话框”所以这里就继承QDialog了。继承类的选取,是根据在创建窗体时选择的窗体类型来确定的。
下面再看一看这个类的构造方法:
def __init__(self, parent = None):super(DiaAbout, self).__init__(parent)self.ui = Ui_Dialog()self.ui.setupUi(self)img_icon = QIcon(":/res/snow.ico")self.ui.label.setPixmap(img_icon.pixmap(QSize(64, 64)))
最需要关注的是方法中以下两行代码:
self.ui = Ui_Dialog() #实例化窗体类,并保存在当前实例成员ui中
self.ui.setupUi(self) #调用窗体类实例的setupUi方法
实际上与Qt c++中类似代码起到的作用是差不多的。
3.设计师窗体中控件的响应
有了成员ui,我们就可以非常轻易地获取到控件在当前窗体中的实例了。
在这个例子中,如果我们要获取到QPushButton的实例,可以通过以下代码:
self.btn_ok = self.ui.pushButton
如果要响应窗体中相关控件的一些信号,我们又该怎么做呢?其实非常地简单,套路与Qt c++是差不多的。因为在窗体模块中会调用“QtCore.QMetaObject.connectSlotsByName”方法对控件的信号与槽进行自动连接,因此如果不想使用connect进行连接,那么我们就可以通过以下的格式来定义槽函数了。
@pyqtSlot(信号参数)
def on_控件名_信号名(self, 信号参数):
在这个例子中,我对按钮的“clicked”信号进行了处理, 并使用了窗体默认的槽函数。
@pyqtSlot(bool)
def on_pushButton_clicked(self, checked):self.close()
这个函数要做的事情非常简单,就是当按钮按下过后就退出当前窗体。
总结
本章简单地介绍了在pyqt5中qrc资源和Qt设计师的使用方法。大部分内容还是和Qt c++中是一样的。本章的例子同样可以在https://git.oschina.net/linuxlike/PyQtJianYiRuMenZhiNan上下载到。
(本篇文章是我个人分析总结的结果,难免存在不足和错误的地方,如果大家看到,还请就相关的问题提出意见,进行交流。)
PyQt5简易入门指南03,使用资源文件和设计师相关推荐
- 生成对抗网络入门指南(内含资源和代码)
python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 前言:春节假期结束了,在这个假期中,原本好好的计划终究没能跟上变化,发生了很多意想不到的事情,导致公众号有近十天没能更新,首先给长期 ...
- 《60题PyTorch简易入门指南,做技术的弄潮儿!》
转载来源:<60题PyTorch简易入门指南,做技术的弄潮儿! > 发布于和鲸社区 原文地址:https://www.kesci.com/mw/project/5e0038642823a1 ...
- AngularJS快速入门指南03:表达式
AngularJS通过表达式将数据绑定到HTML. AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}. AngularJS表达式绑定数据到HTML的方式与ng- ...
- Mybatis简易入门指南
Mybatis 1.Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结 ...
- 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则
1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...
- 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿
1 初识PyTorch 1.1 张量 1.导入pytorch包 import torch 2.创建一个空的5x3张量 x = torch.empty(5, 3) print(x) 3.创建一个随机初始 ...
- nacos enablediscoveryclient_Nacos入门指南03 服务发现实践
你好,欢迎阅读,本文是系列文章中的第3篇. Part1 - Nacos 是什么? Part2 - Nacos 环境搭建 Part3 - Nacos 服务发现实践 Part4 - Nacos 分布式配置 ...
- NEON intrinsic 简易入门指南
简介 Neon是ARM平台的向量化计算指令集,通过一条指令完成多个数据的运算达到加速的目的.新的Armv8a架构有32个128bit的向量寄存器,因此每次运算可以同时处理最多128bit的数据. 数据 ...
- EB Tresos 入门指南
作者:Stephen Du 免责声明: 本文为个人学习笔记及总结,仅代表个人观点,尽可能保证内容准确性.复制/转发请注明来源/作者. 欢迎添加微信交流学习. EB Tresos 入门指南 1. 官方资 ...
最新文章
- Fusion360操作记录
- 【学习】009 NIO编程
- flask-migrate数据迁移
- python实现链表反转_反转链表(Python)
- PHP建立和删除目录
- 看完这一篇,你就对 Spring Security 略窥门径了 | 原力计划
- Qt工作笔记-对主事件循环的进一步认识
- java多线程信息共享 多线程管理
- 微服务架构的链路追踪和故障快速排查zipkin(微服务治理)
- slitax 制定iso
- Linux内核分析:跟踪分析Linux内核的启动过程
- [Swift]LeetCode1088. 易混淆数 II | Confusing Number II
- Chrome 开发者工具官方中文文档
- Qt之实现动效导航栏
- HTML中视频默认显示自定义图片
- 为什么极品飞车服务器维修,极品飞车:无极限赛车无法连接服务器是什么原因...
- 最新陈冉冉破译珠心算密码,领略数字之美全套课值得学习吗
- linux中__weak关键字的作用
- 【Hive】大数据的排序和拼接
- 北汇信息正式加入IAMTS联盟,助力智能网联汽车事业发展
热门文章
- 【转】ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Comput
- 11选5c语言代码,11选5中“胆”存秘籍 三绝招助彩民有所斩获
- 常吃十种食物增强免疫力
- ei指什么_EI是什么意思
- 关于产品的一些思考——腾讯之UIDesigner
- 音频裁剪软件有哪些?来看看这几个实用软件
- java中instanceof的用法和实战
- 【181012】VC++ 四国军旗网络游戏源代码
- PCIE地址空间理解
- 中国没概念:被看好时是泡沫 不被看好时成垃圾