几个小小的修改

在上一章中,我通过一个简单的图片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,使用资源文件和设计师相关推荐

  1. 生成对抗网络入门指南(内含资源和代码)

    python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 前言:春节假期结束了,在这个假期中,原本好好的计划终究没能跟上变化,发生了很多意想不到的事情,导致公众号有近十天没能更新,首先给长期 ...

  2. 《60题PyTorch简易入门指南,做技术的弄潮儿!》

    转载来源:<60题PyTorch简易入门指南,做技术的弄潮儿! > 发布于和鲸社区 原文地址:https://www.kesci.com/mw/project/5e0038642823a1 ...

  3. AngularJS快速入门指南03:表达式

    AngularJS通过表达式将数据绑定到HTML. AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}. AngularJS表达式绑定数据到HTML的方式与ng- ...

  4. Mybatis简易入门指南

    Mybatis 1.Mybatis简介 ​ MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结 ...

  5. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

    1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...

  6. 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿

    1 初识PyTorch 1.1 张量 1.导入pytorch包 import torch 2.创建一个空的5x3张量 x = torch.empty(5, 3) print(x) 3.创建一个随机初始 ...

  7. nacos enablediscoveryclient_Nacos入门指南03 服务发现实践

    你好,欢迎阅读,本文是系列文章中的第3篇. Part1 - Nacos 是什么? Part2 - Nacos 环境搭建 Part3 - Nacos 服务发现实践 Part4 - Nacos 分布式配置 ...

  8. NEON intrinsic 简易入门指南

    简介 Neon是ARM平台的向量化计算指令集,通过一条指令完成多个数据的运算达到加速的目的.新的Armv8a架构有32个128bit的向量寄存器,因此每次运算可以同时处理最多128bit的数据. 数据 ...

  9. EB Tresos 入门指南

    作者:Stephen Du 免责声明: 本文为个人学习笔记及总结,仅代表个人观点,尽可能保证内容准确性.复制/转发请注明来源/作者. 欢迎添加微信交流学习. EB Tresos 入门指南 1. 官方资 ...

最新文章

  1. Fusion360操作记录
  2. 【学习】009 NIO编程
  3. flask-migrate数据迁移
  4. python实现链表反转_反转链表(Python)
  5. PHP建立和删除目录
  6. 看完这一篇,你就对 Spring Security 略窥门径了 | 原力计划
  7. Qt工作笔记-对主事件循环的进一步认识
  8. java多线程信息共享 多线程管理
  9. 微服务架构的链路追踪和故障快速排查zipkin(微服务治理)
  10. slitax 制定iso
  11. Linux内核分析:跟踪分析Linux内核的启动过程
  12. [Swift]LeetCode1088. 易混淆数 II | Confusing Number II
  13. Chrome 开发者工具官方中文文档
  14. Qt之实现动效导航栏
  15. HTML中视频默认显示自定义图片
  16. 为什么极品飞车服务器维修,极品飞车:无极限赛车无法连接服务器是什么原因...
  17. 最新陈冉冉破译珠心算密码,领略数字之美全套课值得学习吗
  18. linux中__weak关键字的作用
  19. 【Hive】大数据的排序和拼接
  20. 北汇信息正式加入IAMTS联盟,助力智能网联汽车事业发展

热门文章

  1. 【转】ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Comput
  2. 11选5c语言代码,11选5中“胆”存秘籍 三绝招助彩民有所斩获
  3. 常吃十种食物增强免疫力
  4. ei指什么_EI是什么意思
  5. 关于产品的一些思考——腾讯之UIDesigner
  6. 音频裁剪软件有哪些?来看看这几个实用软件
  7. java中instanceof的用法和实战
  8. 【181012】VC++ 四国军旗网络游戏源代码
  9. PCIE地址空间理解
  10. 中国没概念:被看好时是泡沫 不被看好时成垃圾