IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 3 - PyQt5 程序基本结构分析 -> 正文阅读

[Python知识库]3 - PyQt5 程序基本结构分析

3 - PyQt5 程序基本结构分析

1、面向过程版本代码结构

(1)导入需要的包和模块
# 导入系统包
import sys
# PyQt5.Qt把常用的类汇总在一起
from PyQt5.Qt import *
(2)创建一个应用程序
# app是变量名,sys.argv帮助我们在用命令行执行程序时传递参数
app = QApplication(sys.argv)
print(app.arguments())

首先从名字上看:argv 的意思就是参数

parameter 是指函数定义中的参数,而 argument 指的是函数调用时的实际参数。

代码有两种执行方式:一种是右击,执行;另一种是命令行 python + *.py

测试 sys.argv 有什么作用?

import sys
args = sys.argv
print(args)

右击执行的结果:

image-20210906215924759

命令行(下面Terminal)执行的结果:

image-20210906220321498

打印出的结果都是文件所在路径,结果类型是列表(有‘[ ]’)

在执行脚本时可以通过命令行传递参数,比如:

image-20210906220758132

故通过 python 执行脚本文件时可以通过 sys.argv 来接受传递的参数,从而执行不同的业务逻辑,比如:

import sys

args = sys.argv
print(args)
# 利用参数传递业务逻辑
if args[1] == '1':
    print("唉好饿")
else:
    print("不,你不饿")

运行结果:

image-20210907202252452

(3)控件操作
# 创建控件
window = QWidget()
# 设置控件(尺寸、位置、样式...),事件、信号的处理
# 注意空间尺寸不包含标题栏,它的大小指的是下图里的红框部分,同理move所指的控件位置是左上角距离红框左上角的坐标。
window.setWindowTitle("开始学Qt")
window.resize(500, 500)
label = QLabel(window)
label.setText("这是个标签")
label.move(200, 100)
# 展示控件
# 没有父对象控件默认不显示,必须要调用show()才可以
window.show()

image-20210908220558675

控件可以作为容器,承载其他控件。

顶层控件:

如果该控件没有父控件,则认定为是顶层控件(窗口)。系统会自动给窗口包装,即添加一些装饰(标题栏——最小化、最大化、关闭),顶层控件(窗口)具备一些特性(设置标题、图标)。

app = QApplication(sys.argv)
window = QWidget()
window.show()
sys.exit(app.exec_())

image-20210908213611957

非顶层控件:

app = QApplication(sys.argv)
window = QWidget()
label = QLabel(window)
label.setText("这是个标签")

window.show()
sys.exit(app.exec_())

顶层控件的设置方法就是:在定义的时候括号内写上父控件的变量名,比如 label = QLabel(window)。

且如果有父控件,那么父控件展示之后,子控件会自动展示(只用 window.show() 不用 label.show())

image-20210908214614378

如果把 label = QLabel(window) 括号内的 window 删掉,则会出现两个窗口,也就是两个顶层控件。

PS: label.show() 不可缺少,否则 label 无法显示

image-20210908214827962

(4)开始执行应用程序,并进入消息循环
# 循环是指程序开始执行后无限循环,持续地显示该页面;消息是指循环过程中一直在检测用户的交互信息
# sys.exit(app.exec_())表示首先执行app.exec_()进入主消息循环,一旦用户点击关闭按钮或是程序崩溃,app.exec_()将该消息上报给系统。
sys.exit(app.exec_())

补充:sys.exit() 与 exec_() 方法

当运行 sys.exit() 时,会出现:Process finished with exit code 0

0 表示正常退出,若出现 1 表示程序出错了,一般伴有 error,若出现 -1 表示被打断退出。

exec_() 方法的作用是“进入程序的主循环直到 exit() 被调用”,即让这个程序(可视化界面)保持住显示不会退出。

虽然 Python 的一切也需要调用才能生效,但是一旦被调用就会立即有反应。PyQt 则是类和对象的层层嵌套,需要逐层调用。以前一直以为读过 show() 这个方法之后就会有窗口显示在屏幕上,其实真正让窗口显示出来的并不是它,这一句其实是个界定窗口在何时弹出的“声明”,解释器读取到这里,Application 还没有启动,只是确定了一旦启动,应该在“这个时候”弹出这个窗口。真正让整个程序运转的是 sys.exit(app.exec_()) 里面嵌套的这个 app.exec_() 。

exec:执行;exit:退出

2、重点总结

(1)每一个PyQt程序都需要一个应用程序对象。

它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。

它也处理应用程序的初始化和结束,并且提供对话管理。

它也处理绝大多数系统范围和应用程序范围的设置。

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

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

(4)一个应用程序中可以显示多个顶级控件。

如果一个Widget没有父控件,则认定为是顶级控件(顶级窗口),有标题栏,可以设置图标,标题;有最大化,最小化,关闭等操作。

如果想要一个控件展示在另外一个控件内部,必须要有父子关系。

如果两个对象为父子关系,那么父对象显示之后,一般子对象会自动显示。


参考博客:

对 app.exec_() 的解释:

https://ukyoi.wordpress.com/2010/08/01/%E7%BB%88%E4%BA%8E%E7%9F%A5%E9%81%93%E8%BF%99%E4%B8%AAapp-exec_%E6%98%AF%E5%95%A5%E6%84%8F%E6%80%9D%E4%BA%86/

作话:这几天好忙好忙好忙,没做到日更,慢慢来吧,一件一件事情去做!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:42:11  更:2021-09-09 11:43:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:04:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码