【python】PyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5,tkinter,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战
景天的主页:景天科技苑

文章目录

  • 1.PyQt5常用模块
    • 常用模块介绍
  • 2.PyQt5初体验,显示一个窗口
    • 1.使用面向过程的编程方法
      • (1)代码解读
      • (2)PyQt5程序基本结构解析
      • (3)pycahrm激活模板设置
    • 2.使用面向对象的编程方法

1.PyQt5常用模块

所有模块参考官方文档:https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html
在这里插入图片描述

比如我们点进去一个模块QtWidgets 进去看一下,里面包含了该模块拥有的所有的类
在这里插入图片描述

在这里面也可以检索,比如不知道某个类属于哪个模块,可以搜索
在这里插入图片描述

ctrl F搜索
在这里插入图片描述

可以看到该类完整的所属路径
在这里插入图片描述

常用模块介绍

QtWidgets 包含了一整套UI元素控件,用于建立符合系统风格的界面
QtGui 涵盖了多种基本图形功能的类(字体,图形,图标,颜色…)
QtCore 涵盖了包的核心的非GUI功能(时间,文件,目录,数据类型,文本流,链接,线程进程…)
QtWebKit 浏览器引擎
QtTest 测试
QtSql 数据库操作相关
QtMultimedia QtMultimediaWidgets 多媒体相关

对于初学者,我们先直接用Qt模块
Qt 将基本全部模块中的类综合到一个单一的模块中。
好处 不用关心哪个模块包含哪些类了
坏处 很多模块被导入而没有使用,占用内存
在这里插入图片描述

我们点进去看,Qt模块,基本将常用的模块都导入进来
在这里插入图片描述

2.PyQt5初体验,显示一个窗口

1.使用面向过程的编程方法

from PyQt5.Qt import *
import sys
#创建一个应用程序
app = QApplication(sys.argv)
#创建一个窗口
window = QWidget()
window.setWindowTitle("景天科技苑")
#设置窗口大小
window.resize(500, 500)
#将窗口移动到某个位置,move的参数是x,y轴坐标,单位是像素
window.move(400, 200)#创建标签,标签控件展示到窗口上,所以将窗口对象传进去
label = QLabel(window)
#设置标签内容
label.setText("Hello JingTian")
label.move(200, 200)#展示窗口
window.show()#开始执行应用程序,并进入消息循环
sys.exit(app.exec_())

运行效果展示
在这里插入图片描述

(1)代码解读

在这里插入图片描述

  1. 一个PyQt程序都需要一个应用程序对象
    它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。
    它也处理应用程序的初始化和结束,并且提供对话管理。
    它也处理绝大多数系统范围和应用程序范围的设置。

  2. app.exec_()意思是让程序进入主循环,不要停止

  3. 一个没有父对象控件默认不显示,必须要调用show()才可以

  4. 一个应用程序中可以显示多个顶级控件
    如果一个Widget没有父控件,则认定为是顶级控件(顶级窗口)
    有标题栏,可以设置图标,标题
    有最大化,最小化,关闭等操作
    如果想要一个控件展示在另外一个控件内部,必须要有父子关系
    如果两个对象为父子关系,那么父对象显示之后,一般子对象会自动显示

(2)PyQt5程序基本结构解析

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# print(app.arguments())
#qApp可以从其他模块拿到该模块的app对象,是全局的
# print(qApp.arguments())# 2. 控件的操作
# 创建控件,设置控件(大小,位置,样式...),事件,信号的处理
# 2.1 创建控件
# 当我们创建一个控件之后, 如果说,这个控件没有父控件, 则把它当做顶层控件(窗口)
# 系统会自动的给窗口添加一些装饰(标题栏), 窗口控件具备一些特性(设置标题,图标)
#QWidget是空白的窗口
window = QWidget()
# window = QPushButton()
# window = QLabel()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("景天科技苑")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(400, 400)# 控件也可以作为一个容器(承载其他的控件),此时的window就是label的父控件
#如果某控件继承父控件,则它会单独生成一个窗口。因此要想程序只显示到一个窗口中,一般只设置一个父控件,其他控件都继承它就行了
#这里表示标签控件放在了window控件里面
label = QLabel(window)
label.setText("JingTian")
#子控件无法设置标题,设置了也不生效
# label.setWindowTitle("xxxxxxx")
#相对于父控件移动的距离
label.move(160, 150)
#子控件无需调用show方法
# label.show()# 2.3 展示控件
# 刚创建好一个控件之后,(这个控件没有什么父控件), 默认情况下不会被展示,只有手动的调用show()才可以
# 如果说这个控件, 有父控件的,那么一般情况下, 父控件展示之后, 子控件会自动展示,这里子控件label也展示了
window.show()# 3. 应用程序的执行, 进入到消息循环
# 让整个程序开始执行,并且进入到消息循环(无限循环)
# 检测整个程序所接收到的用户的交互信息
#sys.exit方法传的参数为状态码,表示程序退出时的退出码,0表示正常退出,非零表示异常退出
#保证程序不会退出,不然程序会一闪而退。作为GUI程序,用户要在界面操作,肯定不能一闪而退
sys.exit(app.exec_())#sys.argv 收集命令行参数的
# 我们的代码, 到时候的执行方式, 右击, 执行   2, 命令行 python 代码名称
# 当别人通过命令行启动这个程序的时候,可以设定一种功能(接收命令行传递的参数, 来执行不同的业务逻辑
# args = sys.argv
# print(args)
# if args[1] == '1':
#     print("xxx")
# else:
#     print("ooo")# sys.exit()

qApp是个全局变量,可以从其他模块拿到该模块的app对象
官方代码
在这里插入图片描述

通过打印得知,qApp与我们自己创建的app得到的结果一样
在这里插入图片描述

(3)pycahrm激活模板设置

我们看下代码会发现,每次通过PyQt5来开发图形化界面程序,很多代码都是重复的,我们每次都要写一遍,对于重复的代码,每次都要写一遍,很耽误时间
在pycharm中,我们可以通过设置模板,来简化我们得开发

我们将重复性的代码拷出来

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(500, 500)# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

然后在pycharm的设置中搜索live,找到Live Template
在这里插入图片描述

找到python,展开。在pyhton目录里面添加活动模板
在这里插入图片描述

点击右侧的加号,选择 Live Template
在这里插入图片描述
在这里插入图片描述

Abbreviation 表示我们设置的快捷键 比如qtt,Description 填写模板描述信息
然后将我们准备好的模板代码粘贴到Template text中,
当我们在python文件中,输入qtt时,就会自动将我们设置的代码块插入到python文件中
在这里插入图片描述

我们还需要插入模板代码后,光标定位到需要修改的地方
怎么配置呢?
在需要修改的地方。用$符号包裹一个变量
在这里插入图片描述
在这里插入图片描述

然后点击 下面的Define,设置我们这个模板应用到哪些代码中
在这里插入图片描述

选择python
在这里插入图片描述

然后点击Apply应用,点击OK

此时,当我们创建python文件后,只需要输入qtt,按回车,就可以将我们设置的模板代码插入进去
在这里插入图片描述

并且,光标定位到我们设置的位置
在这里插入图片描述

添加些控件运行
在这里插入图片描述

2.使用面向对象的编程方法

上面面向过程的写法,在程序比较小时,还是可以的,但是如果我们开发的GUI程序较大时,采用面向过程的方法,则不是那么合适了,一是代码比较冗余,二是维护起来不太方便,三是就是重用价值比较差

面向对象代码如下:

from PyQt5.Qt import *#自定义一个类,一般是继承我们要创建的顶级控件
class Window(QWidget):#写自己类的init方法def __init__(self):# 当我们继承某个类时,需要调用父类构造方法,如此才能正常使用父类的一些方法和属性super().__init__()# 设置窗口标题self.setWindowTitle("QLabel项目")self.resize(500, 500)self.setup_ui()# 此处调用一个个UI的方法展示即可def setup_ui(self):self.myqlable()#每个控件可以写一个方法def myqlable(self):#创建控件时,要继承父类qlabel = QLabel(self)qlabel.setText("景天来了")qlabel.move(200,200)#设置控件样式qlabel.setStyleSheet("background-color: cyan;")if __name__ == '__main__':import sysapp = QApplication(sys.argv)# QWidget控件的父子关系()window = Window()# window = QWidget()window.show()sys.exit(app.exec_())

运行,依然能正常显示窗口和组件
在这里插入图片描述

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

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

相关文章

【漏洞复现】红帆iOffice.net wssRtSyn接口处存在SQL注入

【产品&&漏洞简述】 红帆iOffice.net从最早满足医院行政办公需求(传统OA),到目前融合了卫生主管部门的管理规范和众多行业特色应用,是目前唯一定位于解决医院综合业务管理的软件,是最符合医院行业特点的医院综…

MyBatis 动态 SQL怎么使用?

引言:在现代的软件开发中,数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域,MyBatis 作为一款优秀的持久层框架,以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

【机器学习300问】127、怎么使用词嵌入?

在探讨如何使用词嵌入之前,我们首先需要理解词嵌入模型的基础。之前的文章已提及,词嵌入技术旨在将文本转换为固定长度的向量,从而使计算机能够解析和理解文本内容。可以跳转下面链接去补充阅读哦! 【机器学习300问】126、词嵌入…

会声会影2024旗舰版汉化最新安装包下载方法步骤

嗨,亲爱的CSDN的朋友们!🎉今天,我要跟大家分享一款让你的视频编辑体验升级的神器——会声会影2024最新版本!✨如果你是一个热衷于创作视频内容的创作者,那么你一定不能错过这个软件。它不仅功能强大&#x…

一款Wordpress网站导航主题,带昼夜切换功能

Wordpress网站导航主题,带昼夜切换功能。 基于wordpress,部署和使用都比较方便。 界面比较简洁大方。后台管理功能也比较全面,值得一试。 这款主题界面、功能都非常简洁。 作者把这款定位为简约导航主题,所以这款wordpress导航…

uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

ffmpeg音视频开发从入门到精通——ffmpeg下载编译与安装

音视频领域学习ffmpeg的重要性 音视频领域中ffmpeg的广泛应用&#xff0c;包括直播、短视频、网络视频、实时互动和视频监控等领域。掌握FM和音视频技术可以获得更好的薪酬。 学习建议音视频学习建议与实战应用 音视频处理机制的学习&#xff0c;需要勤加练习&#xff0c;带…

【C++题解】1741 - 求出1~n中满足条件的数的个数和总和?

问题&#xff1a;1741 - 求出1~n中满足条件的数的个数和总和&#xff1f; 类型&#xff1a;简单循环 题目描述&#xff1a; 请求出 1∼n 之间所有满足 2 的倍数但不是 3 的倍数的数&#xff0c;有多少个&#xff0c;总和是多少&#xff1f; 输入&#xff1a; 读入一个整数 …

构建智慧高速公路:软件管理平台业务架构解析

随着交通网络的不断完善和技术的快速发展&#xff0c;智慧高速公路正成为交通领域的重要发展方向。在智慧高速公路系统中&#xff0c;软件管理平台扮演着关键的角色&#xff0c;它不仅是管理各种设备和系统的核心&#xff0c;还承担着数据监控、故障诊断、维护管理等重要任务。…

任务调度框架革新:TASKCTL在Docker环境中的高级应用

Docker&#xff1a;轻量级容器化技术的魅力 Docker 作为一款开源的轻量级容器化技术&#xff0c;近年来在 IT 界掀起了一股热潮。它通过封装应用及其运行环境&#xff0c;使得开发者可以快速构建、部署和运行应用。Docker 的优势在于其轻量级、可移植性和可扩展性&#xff0c;它…

基于python+django的深度学习的身份证识别考勤系统【D1】

简介&#xff1a; 基于Python和Django开发的深度学习身份证识别考勤系统&#xff0c;利用深度学习算法&#xff0c;能够智能化地分析上传的身份证照片&#xff0c;准确识别和提取姓名及号码信息。这一技术不仅简化了传统考勤过程&#xff0c;还显著提升了数据的精确性和管理效率…

异地如何共享视频文件?

人们对于信息流动的需求越来越高。尤其在分布式团队合作、远程办公的背景下&#xff0c;异地共享视频文件成为了一项重要的技术需求。本文将介绍一款名为【天联】的组网产品&#xff0c;它能够实现不同地区间快速组建局域网&#xff0c;解决不同设备间的信息远程通信问题。 2.…

计算机网络期末复习——简明扼要介绍考点及相关知识

期末复习的方法论&#xff1a;一般来说&#xff0c;期末复习都是“理论”结合“实践”。 理论&#xff0c;在于要对期末考点有基本的把握。可以询问老师或者师兄&#xff0c;总之要知道考试的重点在哪里。对照教材&#xff0c;勾画考试重点&#xff0c;删去不重要的琐碎知识点。…

NLP基础概念

NLP任务不同于CV任务&#xff0c;它存在更多难点&#xff0c;例如&#xff1a; 数据表示&#xff1a;NLP任务处理的是文本数据&#xff0c;需要将自然语言文本转化为计算机可处理的形式&#xff0c;即如何把字符串变为数值数据&#xff0c;常用的有词嵌入&#xff08;Word Embe…

搭建群辉AudioStation音乐库

目录 1、安装套件 2、配置歌词插件 3、配置音乐库 4、PC端使用 5、手机APP (1)DS Audio (2)音流 6、关于歌曲信息及封面 (1)歌词 (2)封面 作为音乐爱好者,在NAS上存了大量的无损音乐,用文件流量的方式播放,体验未免欠佳。这次我们打造自己的音乐库,随时随…

昇思25天学习打卡营第3天|数据集 Dataset|数据变换 Transforms

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 数据集 Dataset 数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&am…

探寻Scala的魅力:大数据开发语言的入门指南

大数据开发语言Scala入门 一、引言1.1 概念介绍1.2 Scala作为大数据开发语言的优势和应用场景1.2.1 强大的函数式编程支持1.2.2 可与Java无缝集成1.2.3 高性能和可扩展性1.2.4 大数据生态系统的支持 二、Scala基础知识2.1. Scala简介&#xff1a;2.1.1 Scala的起源和背景2.1.2 …

基于微信共享充电桩小程序毕业设计作品成品(3)开发技术文档_充电桩小程序前端技术栈

后台管理系统文件 所在路径&#xff1a;后台源码ht目录是后台 绿色显示的是系统框架&#xff0c;不要动 位置程序名说明源码根目录login.php后台登录页面源码根目录check_u_login.php后台登录处理程序ht 后台根目录index.php后台首页left.php后台左侧菜单u_logout.php退出登…

服务器数据恢复—raid5热备盘同步失败导致阵列崩溃如何恢复数据?

服务器存储数据恢复环境&故障&#xff1a; 某品牌DS5300存储&#xff0c;包含一个存储机头和多个磁盘柜&#xff0c;组建了多组RAID5磁盘阵列。 某个磁盘柜中的一组RAID5阵列由15块数据盘和1块热备硬盘组建。该磁盘柜中的某块硬盘离线&#xff0c;热备盘自动替换并开始同步…

【vue3】for循环多选框勾选必填校验

业务场景&#xff1a; 多选项必选一个&#xff0c;选了的输入框必填 <el-row :gutter"20"><el-col :span"12"><el-form-item label"捆绑终端硬件标识" prop"terminalCodeList"><el-checkbox-groupv-model"…