PYQT5学习笔记01——PYQT5初体验以及PYQT5程序基本结构分析

news2025/1/12 3:52:49

一、PYQT5初体验

我们首先用代码编写一个窗口,窗口里面有一个标签控件,标签内的文本是 Hello World,代码如下:

# -*- coding: UTF-8 -*-
# 导入需要的包
from PyQt5.Qt import *
import sys

# 创建应用程序对象
app = QApplication(sys.argv)

# 控件操作
window = QWidget()
window.setWindowTitle("社会我唐哥,人狠话不多")
window.resize(500, 500)
window.move(400, 200)

label = QLabel(window)
label.setText("Hello World")
label.move(200, 200)

window.show()

# 开始执行应用程序,并进入消息循环
sys.exit(app.exec_())

运行效果图如下:
在这里插入图片描述

二、PYQT5程序基本结构分析

程序分为三部分组成,分别是:创建一个应用程序对象、控件的操作、开始执行应用程序,并进入消息循环。

0、导入需要的包

虽然所有子模块都在PyQt5中,但是想要找到具体的函数在哪个子模块还是十分困难的我们可以直接使用如下语句引入所有的子模块使用:

from PyQt5.Qt import *  # 主要包括了我们常用的一些类,汇总到一块

其实Qt这个子模块本质上也是引入了所有子模块,Qt源码如下图:
在这里插入图片描述

1、创建一个应用程序

创建一个应用程序的语句如下:

app = QApplication(sys.argv)

创建的这个应用程序就相当于我们写的这个GUI。

(1)sys.argv的作用

其中sys.argv的作用是用来接收参数的,因为执行程序有两种方式,一种是pycharm右击直接运行,另一种是通过命令行来运行。第一种方式如下:
在这里插入图片描述
命令行执行如下:
在这里插入图片描述
我们以命令行的方式启动程序的话,是可以传递参数的,如下:
在这里插入图片描述

代码如下:

app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量
print(app.arguments())  # 打印传递的参数

我们可以发现,sys.argv 用列表来接收参数,第一个位置是文件名字,第二个位置是参数1 …依次类推。

那传递的参数有身边吗用呢?我们可以通过传递不同的参数来执行不同的逻辑,比如下面的代码:

args = sys.argv
print(args)
if args[1] == '1':
    print('xxxx')
else:
    print('oooo')
(2)全局的app对象

我们如果在一个文件中创建的app对象,这个对象是局部变量,如果其他文件想使用这个对象获取参数的话,就是用不了。

PyQt5给我们定义了一个全局变量为 qApp,源码如下:

qApp = QApplication()

我们可以发现,qApp是Pyqt5帮我们创建的全局变量,每个文件都能用,但是里面没有传递参数,需要我们自己重新创建传递参数。

如果我们需要使用局部变量的话,就自己创建应用程序对象;如果我们想使用不带参数的全部变量的话,就直接调用qApp即可;如果我们想使用带参数的全局变量的话,自己重新创建qApp即可。

2、控件的操作

(1)创建控件

当我们创建一个控件之后,如果说,这个控件没有父控件,则把它当成顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),窗口控件具备一些特性(设置标题,图标),代码如下:

window = QWidget()  # 创建一个空白窗口
# window = QPushButton()  # 创建一个按钮
# window = QLabel()  # 展示一个标签

效果如下,框出来的就是标题栏:
在这里插入图片描述

(2)设置控件

控件也可以作为一个容器(承载其他的控件),我们将一个标签控件label丢进空白控件QWidget中,代码如下:

window.setWindowTitle("社会我唐哥")  # 设置窗口标题
window.resize(500, 500)  # 设置窗口大小
window.move(400, 300)  # 设置窗口在屏幕的位置

# 控件也可以作为一个容器(承载其他的控件)
label = QLabel(window)  # 将标签子控件加入到父控件中
label.setText("hello world")
label.move(200, 200)  # 设置标签在窗口的位置

效果图如下:
在这里插入图片描述

(3)展示控件

刚创建好一个控件之后(该控件没有父控件),默认情况下不会被展示,只有手动的调用show才会被展示。

子控件不用show。

代码如下:

window.show()  # 将窗口展示出来

3、开始执行应用程序,并进入消息循环

sys.exit(app.exec_()) :保证整个GUI程序不会退出,窗口会一直显示,不会自动关闭,并且会不断地去监听用户的交互操作信息。

app.exec_() :如果程序内部发生错误的话,返回的退出码。将退出码传递给sys.exit(),就可以将退出码显示在控制台。

代码如下:

sys.exit(app.exec_())

4、总体注释代码

# -*- coding: UTF-8 -*-
# 0.导入需要的包
from PyQt5.Qt import *  # 主要包括了我们常用的一些类,汇总到一块
import sys


# 1、创建一个应用程序对象
# 执行程序的两种方式:1、pycharm右击   2、命令行python 文件名字
# sys.argv:如果用命令行执行该程序的话,可以通过sys.argv来接收参数,命令为:python 文件名字 参数1 参数2  .....
# sys.argv用列表来接收参数,第一个位置是文件名字,第二个位置是参数1 .....依次类推
# 通过接收的参数,来判断应该执行什么什么逻辑的代码
# args = sys.argv
# print(args)
# if args[1] == '1':
#     print('xxxx')
# else:
#     print('oooo')

# 另一种方式是将这些参数传递给app对象,通过app对象也可以获取这些参数
app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量
print(app.arguments())  # 打印传递的参数
# qApp = QApplication(sys.argv)
# print(qApp.arguments()) # qApp是Pyqt5帮我们创建的全局变量,每个文件都能用,但是里面没有传递参数,需要我们自己重新创建传递参数
# 2、控件的操作
# 创建控件,设置控件(大小、位置、样式)
# 1、创建控件
'''
当我们创建一个控件之后,如果说,这个控件没有父控件,则把它当成顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),
窗口控件具备一些特性(设置标题,图标)
'''

window = QWidget()  # 创建一个空白窗口
# window = QPushButton()  # 创建一个按钮
# window = QLabel()  # 展示一个标签
# 2、设置控件
window.setWindowTitle("社会我唐哥")  # 设置窗口标题
window.resize(500, 500)  # 设置窗口大小
window.move(400, 300)  # 设置窗口在屏幕的位置

# 控件也可以作为一个容器(承载其他的控件)
label = QLabel(window)  # 将标签子控件加入到父控件中
label.setText("hello world")
label.move(200, 200)  # 设置标签在窗口的位置

# 3、展示控件
# 刚创建好一个控件之后(该控件没有父控件),默认情况下不会被展示,只有手动的调用show才会被展示
# 子控件不用show
window.show()  # 将窗口展示出来

# 3、开始执行应用程序,并进入消息循环
# sys.exit(app.exec_())  # 保证整个GUI程序不会退出,窗口会一直显示,不会自动关闭,并且会不断地去监听用户的交互操作信息
# app.exec_():如果程序内部发生错误的话,返回的退出码
# 将退出码传递给sys.exit,就可以将退出码显示在控制台
sys.exit(app.exec_())

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

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

相关文章

【c++初阶】:

c入门 一.概念二.使用三.应用四.常引用五.引用与指针 一.概念 c语言中我们常用指针找地址,但在c中,忽略了指针(当然也可以使用指针)。常用引用这个概念。 二.使用 可以看到这里的b和c本质上都是a,只是不同的称呼罢了。…

手把手教你将项目部署到服务器!

一、导入centos7虚拟机: 打开VMWare,点击“打开虚拟机”,选择centos7.ova之后,选择存储路径: 点击导入: 选择“不再显示此消息”,点击“重试”按钮: 点击“编辑虚拟机设置”&#x…

【数据结构】二叉树OJ题

😽PREFACE 🎁欢迎各位→点赞👍 收藏⭐ 评论📝 📢系列专栏:数据结构 🔊本专栏主要更新的是数据结构部分知识点 💪种一棵树最好是十年前其次是现在 目录 1.单值二叉树 2.相同的树 …

Hadoop之Hive

文章目录 一、Hive简介1.1 Hive 基本概念1.2 Hive架构图1.3 Hive数据模型 二、Hive安装配置2.1 内嵌模式2.2 配置元数据到mysql2.3本地模式2.4远程模式2.5 Hive JDBC Hiverserver22.5.1远程模式下使用Beeline CLI2.5.2 DataGrip图形化客户端 2.6 Hive常见属性配置 一、Hive简介…

Vue基础入门(上)

<script src"https://unpkg.com/vuenext"></script> 从面向dom编程到面向数据编程 输入显示列表 const appVue.createApp({data(){return{inputValue:,list:[]}},methods:{handleAddItem(){this.list.push(this.inputValue);this.inputValue;}},templ…

(一) nvidia jetson orin nvcsi tegra-capture-vi camera相关内容梳理 之 vi相关代码分析

背景:对于nvidia 的jetson orin 的camera,其内部是如何实现的尼?硬件方面的pipeline是怎么关联的,其内部有哪些camera相关的modules?对于这些modules,软件上又是怎么去实现?设备树如何去抽象这些modules?分析完后,给我们一个camera sensor,如何进行bring up?本文将会…

什么是 AUTOSAR C++14?

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 什么是 AUTOSAR C14&#xff1f;AUTOSAR C14 规则和偏差静态分析工具可以完全支持自动 什么是 AUTOSAR C14&#xff1f; 它是 C 版本 14 (ISO/IEC 14882:2014…

Mac安装Stable Diffusion教程【超详细教程】附带安装包

Mac安装Stable Diffusion教程 本机配置Mac安装Stable Diffusion教程 配带官方说明重要注意事项安装所需文件已上传网盘自动安装新安装&#xff1a; 自动安装现有安装&#xff1a; 下载稳定扩散模型故障排除Web UI无法启动&#xff1a;性能不佳&#xff1a; 本机配置 电脑&…

DJ4-3 路由器的工作原理

目录 一、路由器的整体结构 二、输入端口的功能 1. 三大模块 2. 查找与转发模块 三、交换结构 1. 经内存的交换结构 2. 经总线的交换结构 3. 经交换矩阵交换结构 四、输出端口的功能 五、排队 1. 输入端口排队 2. 输出端口排队 一、路由器的整体结构 路由器的两个…

一秒钟给硬盘文件做个树状结构目录

一秒钟给硬盘文件做个树状结构目录 一、背景 对于长时间坐在电脑前的打工人来说&#xff0c;若没有养成良好文件分类习惯的话&#xff0c;年终整理电脑文件绝对是件头疼的事情。 给磁盘文件做个目录&#xff0c;一目了然文件都在哪里&#xff1f;想想都是件头疼的事情。 对于…

golang 实现 ldif 数据转成 json 初探

theme: Chinese-red 「这是我参与11月更文挑战的第 8 天&#xff0c;活动详情查看&#xff1a;2021最后一次更文挑战」 上一篇我们分享了如何将 ldif 格式的数据&#xff0c;转换成 json 数据的思路并画相应的简图 这一次&#xff0c;我们就来实现一下 实现方式如下&#xff…

P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

[国家集训队]Crash的数字表格 / JZPTAB 题目描述 今天的数学课上&#xff0c;Crash 小朋友学习了最小公倍数&#xff08;Least Common Multiple&#xff09;。对于两个正整数 a a a 和 b b b&#xff0c; lcm ( a , b ) \text{lcm}(a,b) lcm(a,b) 表示能同时整除 a a a 和…

『pyqt5 从0基础开始项目实战』10.日志记录 鼠标右键打开(保姆级图文)

目录 导包和框架代码实现右键功能实现日志展示弹窗编写一个日志文件用于测试日志展示完整代码main.pythreads.pydialog.py 总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 导包和…

Python常用练习小例子

Python常用练习小例子 1、输出九九乘法表 源码如下&#xff1a; # 九九乘法表 for i in range(1, 10):for j in range(1, i1):print({}x{}{}\t.format(i, j, i*j), end)print() # 换行&#xff0c;相当于print(end\n) 其中&#xff0c;rint({}x{}{}\t.format(i, j, i*j), e…

Kubespray v2.21.0 离线部署 Kubernetes v1.25.6 集群

文章目录 1. 前言2. 预备条件3. 配置代理4. 下载介质5. 初始化配置6. 安装部署工具6.1 配置 venv 部署环境6.2 配置容器部署环境 7. 配置互信8. 编写 inventory.ini9. 编写 offline.yml10. 部署 offline repo11. 部署 kubernetes 1. 前言 Kubespray 是 Kubernetes incubator 中…

【Python合集】程序员系列代码之“这么好的天气应该去放风筝,而不是在搬砖,好想去放风筝哦~”(附完整代码)

导语 ☽ ☽ ☽ ☽ ☽ ☽ 文案丨April 19th, 2023 ☆ ☽ ☽☽ ☽☽ ☽ 江滩边摇摇晃晃的风筝 是春日越冬归来的信号 风筝蹦蹦跳跳 看盎然春意四处热闹阿姨路过菜摊子 带把香椿回家炒蛋细子摘桑 被酸得直口水嗲嗲裹着棉袄 托起霸缸到处晒大阳妹子没管倒春寒 提前换上短…

HttpServletRequest

1、HttpServletRequest对象 在Servlet API中&#xff0c;定义了一个HttpServletRequest接口&#xff0c;它继承自ServletRequest接口&#xff0c;专门用于封装HTTP请求消息 1.1 获取请求行信息的相关方法 当访问Servlet时&#xff0c;请求消息的请求行中会包含请求方法、请求…

Spring入门案例--bean实例化

bean实例化 对象已经能交给Spring的IOC容器来创建了&#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程 &#xff0c;在这块内容中主要解决两部分内容&#xff0c;分别是 bean是如何创建的实例化bean的三种方式&#xff0c; 构造方法,静态工厂 和 …

USB TO SPI / USB TO I2C 软件概要 1 --- 专业版调试器

所需设备&#xff1a; 1、USB转SPI_I2C适配器(专业版); 软件概述&#xff1a; SPI类: USB TO SPI 1.0-Slave SPI从机软件&#xff0c;适合单步调试&#xff0c;支持SPI工作模式0、1、2、3&#xff0c;自动跟随主机通讯速率&#xff0c;自动接收数据&#xff1b; USB TO SP…

21、指标监控

文章目录 1、SpringBoot Actuator1、简介2、1.x与2.x的不同3、如何使用4、可视化 2、Actuator Endpoint1、最常使用的端点2、Health Endpoint3、Metrics Endpoint4、管理Endpoints1、开启与禁用Endpoints2、暴露Endpoints 3、定制 Endpoint1、定制 Health 信息2、定制info信息1…