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

news2024/11/27 3:52:21

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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 sys

    app = QApplication(sys.argv)

    # QWidget控件的父子关系()
    window = Window()
    # window = QWidget()

    window.show()

    sys.exit(app.exec_())

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

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

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

相关文章

docker换源

文章目录 前言1. 查找可用的镜像源2. 配置 Docker 镜像源3. 重启 Docker 服务4. 查看dock info是否修改成功5. 验证镜像源是否更换成功注意事项 前言 在pull镜像时遇到如下报错: ┌──(root㉿kali)-[/home/longl] └─# docker pull hello-world Using default …

hive优化之逻辑类似重复

今天拿到一个二次开发的需求,只是增加一个业务类型,开发起来倒是也蛮轻松。 但是,对自己的要求不难这么低,否则可替代性也太高了。 除了完成自己的那部分开发,当然展现自己实力的,可以是优化。 1&#x…

Java基础学习-数组

目录 数组定义 注意点: 地址值是数组在内存中实际存储的地址。 案例遍历:遍历数组得到每一个元素,求数组里面所有数据和 案例:定义数组,遍历能被3整除的数字 案例:遍历一个数组,奇数将当前…

MacOS设备远程登录配置结合内网穿透实现异地ssh远程连接

文章目录 前言1. MacOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接MacOS3.1 MacOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接MacOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

Oracle最终还是杀死了MySQL

起因 大约15年前,Oracle收购了Sun公司,从而也拥有了MySQL,互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论:从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争,到干掉 MySQL 开源项目&…

团队管理五个基本法则,帮你打造高效团队

团队管理是一项至关重要的工作,作为一名管理者,应该如何在团队管理中发挥作用呢?以下是团队管理的五个基本原则,它们能够帮助你打造出一个高效协作的团队。 一、以身作则 团队要保持超强的执行力,管理者必须以身作则…

【初阶数据结构】深入解析带头双向循环链表:探索底层逻辑

🔥引言 本篇将介绍带头双向循环链表底层实现以及在实现中需要注意的事项,帮助各位在使用过程中根据底层实现考虑到效率上问题和使用时可能会导致的错误使用 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔…

华为海思CPU解读

安全可靠CPU测评结果(华为海思篇) 中国信息安全测评中心于2024年5月20日发布安全可靠测评结果公告(2024年第1号),公布依据《安全可靠测评工作指南(试行)》的测评结果,自发布起有效期…

计算机网络:1概述、2物理层

目录 概述因特网网络、互连网(互联网)与因特网的区别与关系因特网发展的三个阶段因特网服务提供者(Internet Service Provider,ISP)因特网的标准化工作因特网的管理结构 三种交换电路交换分组交换报文交换 计算机网络性…

什么电脑录屏软件好用?这里有3款超实用推荐!

在当今数字化时代,电脑录屏软件已经成为了人们日常学习和工作中不可或缺的工具。无论是录制游戏实况、制作教程视频,还是保存线上会议的内容,一款好用的电脑录屏软件都显得尤为重要。可是什么电脑录屏软件好用呢?本文将为大家介绍…

如何有效地进行机台数据管理,让数据发挥更大的价值?

机台数据管理是一个涉及收集、存储、分析和保护与机台(可能是机械设备、生产线设备、医疗设备等)相关数据的过程。通常包括以下几个方面: 1.数据收集:使用传感器和数据采集系统来收集机台的性能数据,如温度、压力、速…

Shell编程规范与变量-01

一、Shell脚本概述 在一些复杂的 Linux 维护工作中,大量重复性的输入和交互操作不仅费时费力,而且容易出错,而编写一个恰到好处的 Shell 脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。 1…

【机器学习】深度学习赋能:基于 LSTM 的智能日志异常检测

目录 1. LSTM 简介 2. 日志序列异常检测概述 3. 数据预处理 3.1 日志解析 3.2 数据清洗 3.3 序列化 3.4 特征提取 示例代码 4. 构建 LSTM 模型 4.1 模型结构 4.2 模型构建示例 5. 训练 LSTM 模型 5.1 数据准备 5.2 模型训练 示例代码 6. 异常检测 6.1 异常分数…

pycharm的一些配置

1.安装 2.字体 3.新建文件模版 4.快捷键设置

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境:LS1046A arm64 系统环境:openEuler release 22.03 (LTS-SP1) Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核,在适配的过程中…

0 简单的图像分类

本文主要针对交通标识图片进行分类,包含62类,这个就是当前科大讯飞比赛,目前准确率在0.94左右,难点如下: 1 类别不均衡,有得种类图片2百多,有个只有10个不到; 2 像素大小不同&…

【论文笔记】Prefix-Tuning: Optimizing Continuous Prompts for Generation

题目:Prefix-Tuning: Optimizing Continuous Prompts for Generation 来源: ACL 2021 模型名称: Prefix-Tuning 论文链接: https://aclanthology.org/2021.acl-long.353/ 项目链接: https://github.com/XiangLi1999/PrefixTuning 感觉与prompt的想法很相近,那么问题…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…

【PHP项目实战训练】——使用thinkphp框架对数据进行增删改查功能

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【Effective Web】常见的css布局方式--三栏布局

常见的css居中方式–三栏布局 第一种实现&#xff1a;table布局&#xff08;不推荐&#xff09; 缺点&#xff1a;在table加载前&#xff0c;整个table都是空白的&#xff0c;且修改布局排版都十分困难 <table class"container"><td class"left"…