【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.rhkb.cn/news/355424.html

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

相关文章

文件扫描工具哪个好?便捷的文件扫描工具推荐

对于初入职场的大学毕业生,申请就业补贴是一项不可忽视的福利。 它不仅能够为新生活带来经济上的缓解,也有助于职业生涯的顺利起步。面对申请过程中需提交的文件,如纸质劳动合同,不必烦恼。市面上众多文件扫描软件能助你一臂之力…

轮式机器人Swiss-Mile城市机动性大提升:强化学习引领未来城市物流

喜好儿小斥候消息,苏黎世联邦理工学院的研究团队成功开发了一款革命性的机器人控制系统,该系统采用强化学习技术,使轮式四足机器人在城市环境中的机动性和速度得到了显著提升。 喜好儿网 这款专为轮腿四足动物设计的控制系统,能…

一种基于图卷积创新的电场强度监测模型,原创未发表!!!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~ 一种基于图卷积创新的电场强度监测模型,原创未发表…

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考:配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本,安装cudnn …

内容安全复习 2 - 网络信息内容的获取与表示

文章目录 信息内容的获取网络信息内容的类型网络媒体信息获取方法 信息内容的表示视觉信息视觉特征表达文本特征表达音频特征表达 信息内容的获取 网络信息内容的类型 网络媒体信息 传统意义上的互联网网站公开发布信息,网络用户通常可以基于网络浏览器获得。网络…

mysql8.0找不到my.ini

报错问题解释: MySQL 8.0 在Windows系统中通常不需要 my.ini 文件,因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ (通常是 C:\ProgramData\MySQL\MySQL Server 8.0\)创建默认的配置文件。如果你的系统中找不到 my.ini…

ArcGIS查找相同图斑、删除重复图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 今天分享一下,很重要却被大家忽略的两个工具 这两个工具不仅可以找出属性…

解决电脑关机难题:电脑关不了机的原因以及方法

在使用电脑的日常生活中,有时会遇到一些烦人的问题,其中之一就是电脑关不了机。当您尝试关闭电脑时,它可能会停留在某个界面,或者根本不响应关机指令。这种情况不仅令人困惑,还可能导致数据丢失或系统损坏。 在本文中…

编译xlnt开源库源码, 使用c++读写excel文件

编译xlnt开源库源码,在linux平台使用c读写excel文件 下载xnlt源码 官方网站https://tfussell.gitbooks.io/xlnt/content/ 下载地址https://github.com/tfussell/xlnt 下载libstudxml开源库源码 下载地址https://github.com/kamxgal/libstudxml 下载xnlt源码 官方网站https://…

Walrus:去中心化存储和DA协议,可以基于Sui构建L2和大型存储

Walrus是为区块链应用和自主代理提供的创新去中心化存储网络。Walrus存储系统今天以开发者预览版的形式发布,面向Sui开发者征求反馈意见,并预计很快会向其他Web3社区广泛推广。 通过采用纠删编码创新技术,Walrus能够快速且稳健地将非结构化数…

C++的动态内存分配

使用new/delete操作符在堆中分配/释放内存 //使用new操作符在堆中分配内存int* p1 new int;*p1 2234;qDebug() << "数字是&#xff1a;" << *p1;//使用delete操作符在堆中释放内存delete p1;在分配内存的同时初始化 //在分配内存的时初始化int* p2 n…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人&#xff0c;对于海外社媒的营销都是需要自动化管理的&#xff0c;因为自动化管理不仅省时省力&#xff0c;而且还节约成本&#xff1b; 海外云手机的自动化管理意味着什么&#xff1f;那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

Python自动化(5)——ocr识字

Python自动化(5)——ocr识字 通过网络识字 网络识字的平台有很多&#xff0c;主要有百度以及科大讯飞&#xff0c;这里以百度智能云来简单示例。 首先需要在百度智能云上注册一个账号&#xff0c;并创建一个应用&#xff0c;网址&#xff1a; https://console.bce.baidu.com/…

高速异地组网怎么办理?

在当今信息化时代&#xff0c;跨地域的远程办公、远程教育、远程医疗等需求越来越多。而高速异地组网作为一种解决不同地区之间快速组建局域网的方法&#xff0c;被广泛应用。本文将介绍一款异地组网内网穿透产品——【天联】&#xff0c;并提供其办理流程。 【天联】组网是什…

LoRa126X系列LoRa模块:专为物联网设计而生

LoRa126X是思为无线研发的一款应用于物联网应用的LoRa 前端模块系列&#xff0c;采用 Semtech 公司的 SX1262和SX1268 芯片。该系列模块具有小体积、低功耗&#xff0c;高灵敏度等特点&#xff0c;并且严格遵循无铅工艺生产和测试流程&#xff0c;符合 RoHS 和 Reach 环保标准。…

oracle发送http请求

UTL_HTTP包让SQL和PLSQL能够调用超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;也就是说可以使用它在Internet上访问数据。 当包用HTTPS从Web site获取数据时&#xff0c;要使用Oracle Wallet&#xff0c;它是由Oracle Wallet Manager或者orapki utility创建。非HTT…

购物网站系统

摘 要 随着互联网的快速发展&#xff0c;不同的平台软件也不断涌出市场&#xff0c;在众多的平台中&#xff0c;购物网站深受人们的欢迎&#xff0c;也成为生活中不可缺少的一部分。经过对国内外购物情况的调查&#xff0c;社区购物在近几年来成为电商发展的新趋势&#xff0c…

VB实现加法计算

textbox1失去焦点&#xff0c;检查输入的值是否为数字。 textbox2中按下Enter键&#xff0c;检查输入的值是否为数字。 textbox3获得焦点&#xff0c;计算textbox1和textbox2的和。 Public Class Form1Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Hand…

【AI大模型】Transformers大模型库(十一):Trainer训练类

目录 一、引言 二、Trainer训练类 2.1 概述 2.2 使用示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预训练大模型提供预测、训练等服务。 &#x1f917; Transformers 提供了数以千计的预训练模型&am…