一个简单的例子

以下是一个用pyqt5写成的简单图片显示程序。

该图片显示程序由一个QLabel和QPushButton组成,当单击按钮时,会弹出一个文件选择对话框,让用户选择合适的图片文件。在用户按下确定后程序会将用户所选择的图片进行显示。

启动脚本

main.py依然作为这个程序的启动脚本。

import sys
from PyQt5.QtWidgets import QApplication
from dumbDialog import DumbDialog   

以上代码导入必要的pyqt5类,完成脚本的启动。其中,我们对上一节例子中的DumbDialog进行了一些小小的修改。不再将它写在main.py里,而是单独写在一个名为dumbdialog.py的脚本文件里,之后再通过上述代码对该类进行导入。接下来的代码:

if __name__ == "__main__":      app = QApplication(sys.argv)    #创建QApplication类的实例dia = DumbDialog()              #创建DumbDialog类的实例dia.show()                      #显示程序主窗口app.exec_()                     #开启事件主循环

如果是曾经学过Qt的同学,会不会觉得以上的代码看着非常的熟悉。没错,pyqt和c++的Qt除了细节上有一点不同之外,其它的套路都是差不多的。大部分类的属性和方法都没有作任何的改变。除了几个关键的地方之外,其它部分完全是可以参考Qt的c++文档完成的。

程序的主窗口

dumbDialog.py中的DumbDialog类作为程序的主窗口,由一个QLabel负责显示信息和图片以及一个QPushButton负责弹出文件对话框,并在用户选择合适图片后通过QLabel进行显示。
首先是类的定义:

class DumbDialog(QDialog):

括号中的QDialog类表示这个类是继承于QDialog的,这个是python面向对象的一个基础知识,不懂的同学可以去查阅相关的资料,个人认为这个还是比较简单的,这里就不再赘述。
然后是这个类的构造函数:

def __init__(self,  parent = None): super(DumbDialog,  self).__init__(parent)self._title = "image_loader" #设置类实例成员_title,它的值为字符串的"image_laoder"self._diawidth = 300 #设置实例成员_diawidth,它的值为300self._diaheight = 450 self.setWindowTitle(self._title) #设置窗口标题self.setMinimumHeight(self._diaheight) #设置窗口最小的大小self.setMinimumWidth(self._diawidth)self.imageView = QLabel("add a image file") #得到一个QLabel的实例,并将它保存在成员imageView里,负责显示消息以及图片self.imageView.setAlignment(Qt.AlignCenter) #设置QLabel居中显示self.btn_open = QPushButton("open") #实例化一个名为"open"的按钮,并将它保存在类成员btn_open中,负责去得到图片的路径,并在QLabel中显示self.btn_open.clicked.connect(self.on_btn_open_clicked) #pyqt5中信号与槽的连接self.vlayout = QVBoxLayout()self.vlayout.addWidget(self.imageView)self.vlayout.addWidget(self.btn_open)self.setLayout(self.vlayout)

我们可以看到构造函数中,与信号和槽连接相关的代码为:

self.widget_name.signal_name.connect(self.slot_name)

而以上的代码在pyqt4中是通过以下的方式进行表示的:

self.connect(self.widget_name, SIGNAL("signal_name(args)"), self.slot_name)

如果同学们以前学过c++版本的Qt,可以很容易的发现,在pyqt4中的信号与槽的连接与在c++中信号与槽的连接最为相似,但是比起pyqt5中的新方法这种方法就略显麻烦,冗杂了。

槽函数

在pyqt5中,槽函数数一般是通过python装饰器@pyqtSlot(typename)进行修饰的。譬如,例子中槽函数表示为:

@pyqtSlot(bool)
def on_btn_open_clicked(self, checked):self.filename = QFileDialog.getOpenFileName(self, "OpenFile", ".", "Image Files(*.jpg *.jpeg *.png)")[0]if len(self.filename):self.image = QImage(self.filename)self.imageView.setPixmap(QPixmap.fromImage(self.image))self.resize(self.image.width(), self.image.height())

通过查阅Qt文档我们可以知道,clicked这个信号是带一个bool的参数的,因此我们需要在装饰器pyqtSlot里进行声明,即bool。之后,上述槽函数的第二个参数”checked”,即为这个bool参数的具体值。对于python装饰器还不是很理解的同学可以去查阅相关资料,这个个人认为还是比较麻烦不好懂的。同学们可以多花费一点时间在这个上面。
这个槽函数要做的工作非常简单,在用户按下按钮后先弹出一个文件对话框,用户选择图片文件后就把文件名存储在self.filename里。之后通过这个具体的文件路径创建一个QImage的实例目的是为了为使用QPixmap.fromImage方法做准备。之后通过这个静态方法产生一个QPixmap的实例,之后就可以通过QLabel的setPixmap设置图片了。整个过程还是非常简单易懂的。如果对上述的过程还有疑问,可以查阅Qt的相关文档。

总结

至此,这个简单的例子就分析完毕了。同学们可以在https://git.oschina.net/linuxlike/PyQtJianYiRuMenZhiNan上下载项目的源代码进行分析学习。
(本篇文章是我个人分析总结的结果,难免存在不足和错误的地方,如果大家看到,还请就相关的问题提出意见,进行交流。)

PyQt5简易入门指南02,简单图片显示程序相关推荐

  1. PyQt5简易入门指南03,使用资源文件和设计师

    几个小小的修改 在上一章中,我通过一个简单的图片loader给同学们简单地讲解了pyqt5的信号与槽机制.在这一章中,我将对这个小程序进行一些简单的升级,通过这些修改,将告诉同学们如何在pyqt5中使 ...

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

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

  3. python编程入门指南-最简单的Python编程入门指南,没基础也能快速入门Python编程...

    原标题:最简单的Python编程入门指南,没基础也能快速入门Python编程 对Python这门编程语言来讲,几乎是没什么不能做到的.最难的不过是如何入门,也就是你进入Python编程的第一步. 其实 ...

  4. Midjourney入门指南:简单提示词,搞定高质量应用设计

    Midjourney是一款文本到图像的AI工具,可以根据纯文本描述生成图片,例如UI屏幕.应用程序图标.产品图片.标志和吉祥物等.虽然它不能替代UI设计师,但它可以在产品设计和视觉探索的早期阶段成为有 ...

  5. qt入门,最简单的qt程序

    最近因为工作的关系需要研究qt了,客观的说,作为一个跨平台的代码框架,qt还是不错的,网上有大量吹捧qt的文章,我就不重复了.但是qt 也实在并不可爱,可能是因为人手太少的原因,qt的相关书籍,示例代 ...

  6. java swing实现简单图片显示(测试生成图片快捷方式)

    原链接:https://yq.aliyun.com/articles/58303 package com.ts.x;import java.awt.Image; import java.awt.ima ...

  7. Mybatis简易入门指南

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

  8. latex入门指南:插入图片、表格、公式方法一览

    省事链接: 生成表格latex代码:www.tablesgenerator.com 生成公式latex代码:www.latexlive.com 目录 1 插入图片 1.1 移动标题位置 1.2 双栏文 ...

  9. PHP入门指南:简单易学的语法和丰富的调试工具与安全性最佳实践

    PHP是一种非常流行的服务器端编程语言,它被广泛地应用于Web开发中.如果您想学习Web开发,那么PHP是一个非常好的选择.在本文中,我将介绍PHP的一些基础知识,包括语法.变量.函数.数组.数据库连 ...

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

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

最新文章

  1. Android之线程池深度剖析
  2. 数据产品通用复合指标查询计算的实践
  3. Java BigDecimal类的使用入门示例
  4. Docker——基于HubServing部署全套PaddleOCR Restful API服务(CPU版本)
  5. CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)
  6. java 在一个类中定义类_Java 中程序代码必须在一个类中定义,类使用( )关键字来定义。_学小易找答案...
  7. 为什么谷歌、百度都热衷黑客马拉松?
  8. java文件下载和导出文件名乱码浏览器兼容性问题
  9. 用自己的语言解释一段简单的汇编
  10. SpringMVC,3种不同的URL路由配置方法 [转]
  11. VS开发中,常见编译问题解决方案
  12. MFC技术内幕系列之(二)---MFC文档视图结构内幕
  13. python 基于numpy的线性代数运算
  14. Unity中的半透明阴影
  15. 利用百度地图服务发布自己制作图片的地图
  16. 如何将JPG转换为PNG?两种图片格式转换的方法交给你
  17. 生日悖论的Python实现
  18. LSTM 长短期记忆神经网络及股票预测实现
  19. 如何高效阅读英文文献
  20. Unity 中子弹弓箭射击脚本

热门文章

  1. css3-pie,CSS3PIE
  2. 目标与计划:仰望星空且脚踏实地
  3. UNews | 1.8亿!优维科技完成C轮融资!
  4. Android 通知用法
  5. Windows下批量合并文本文件
  6. 2022电大国家开放大学网上形考任务-农业微生物学非免费(非答案)
  7. Android版的股票行情K线图开发
  8. 鸿蒙炼体 等级划分,洪荒的等级划分
  9. 老哥们 FlexiTimer库怎么用不了呢 ,指点一下小弟
  10. CSDN代码黑色背景设置