前言
PyQt5显示窗口教程介绍了用PyQt5创建窗口、设置标题、添加标签控件等步骤,并给出了示例代码。通过PyQt5显示窗口来了解PyQt5程序的基本操作步骤,比如导入包模块,创建应用,创建窗口、控件,执行程序等。
1.1 效果
1.2 要求
NO | 需求 |
---|---|
1 | 显示一个窗口500*300 |
2 | 窗口标题:梯阅线条-总结是一种习惯 |
3 | 标签子控件,内容:欢迎来到PyQt5! |
1.3 代码
# 1、导入要用的模块
from PyQt5.Qt import *
import sys
# 2、创建应用,并接收命令行参数
app = QApplication(sys.argv)
# 3、创建窗口
window = QWidget()
window.setWindowTitle('梯阅线条-总结是一种习惯')
window.resize(500, 300)
window.move(900, 300)
# 4、创建标签控件
label = QLabel(window)
label.setText('欢迎来到PyQt5!')
label.move(200, 130)
# 5、显示窗口
window.show()
# 6、执行应用,循环监听消息
# 并将退出状态传给退出命令
sys.exit(app.exec_())
1.4 sys.argv
执行python脚本时,通过sys.argv获取命令行参数列表,列表的第1个元素是python脚本文件名。详细参考《python模块name属性和argv参数》。执行python脚本时,可以传递不同的入参,来执行不同的业务逻辑。
1.4.1 run执行
通过PyCharm打开python文件,右键选择“run”,执行python文件。
执行结果返回参数列表,第1个元素为python文件名。
NO | 项 | 描述 |
---|---|---|
1 | E:\Envs\pyqt5-OsyyNPam\Scripts\python.exe | 表示当前项目pyqt5所在的虚拟环境的python解释器。 |
2 | D:/pycharmworkspace/pyqt5/02-PyQt5-程序基本结构分析-sys.argv.py | 表示PyCharm右键run选中要执行的python文件。 |
3 | ['D:/pycharmworkspace/pyqt5/02-PyQt5-程序基本结构分析-sys.argv.py'] | 表示sys.args返回的值,为列表,且第1个元素为被执行的python文件。 |
1.4.2 命令行执行
通过PyCharm,点击“Terminal”打开命令行终端,类似cmd窗口,只是“Terminal”会自动进入解释器目录和项目目录。
命令行执行python,除了要执行的python文件外,还可以给python文件送入参,入参之间用空格分隔。
NO | 项 | 描述 |
---|---|---|
1 | (pyqt5) | 表示当前项目pyqt5所在的虚拟环境解释器所在路径。 |
2 | D:\pycharmworkspace\pyqt5 | 表示当前项目pyqt5所在路径。 |
3 | > | 表示命令行输入标识。 |
4 | python | 表示输入python命令。 |
5 | 02-PyQt5-程序基本结构分析-sys.argv.py | 表示要执行的python文件。 |
6 | 梯阅线条 PyQt5 | 表示送给python文件的参数。他们和python文件组成python命令行的参数,彼此间用空格分隔。 |
7 | ['02-PyQt5-程序基本结构分析-sys.argv.py', '梯阅线条', 'PyQt5'] | 表示sys.args返回的值,为列表,由命令行参数组成,包括python文件及送给python文件的参数。 |
综上,不管是run还是命令行,最终都要用python解释器,执行python文件。
python 被执行的python文件.py 入参1 入参2 ... 入参n
执行python文件时,sys.argv返回的参数列表就是:[被执行的python文件.py,入参1,入参2,…,入参n],即python命令后接的python文件和全部参数组成的列表。
1.5 Arguments
1.5.1 主程序获取
app = QApplication(sys.argv)
print(f'app.arguments()={app.arguments()}')
执行脚本的主程序,通过QApplication(sys.argv).arguments()获取命令行参数。
终端执行并送入参“python 01-PyQt5-初体验.py 梯阅线条 www.tyxt.work”,结果如下:
1.5.2 全局获取
print(f'qApp.arguments()={qApp.arguments()}')
qApp是QtWidgets包初始化的一个全局变量,在__init__.py文件,如下:
qApp = QApplication()
执行有导入QtWidgets包的模块时会自动创建qApp,通过aApp.arguments()也可以获取命令行参数列表。
1.6 控件
控件的操作包括:创建控件,设置控件(标题、大小、样式…),事件,信号的处理。
1.6.1 窗口
没有父控件的控件,称为窗口,也称为顶层控件。需显示调用show()方法进行展示。
系统会自动给窗口添加修饰,比如标题,最大化,最小化,关闭按钮等。
窗口可以进行设置图标、标题等。可以有多个窗口。
(1) 空白窗口
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.show()
sys.exit(app.exec_())
执行后,自动添加标题栏,标题栏下方的才属于控件部分。
(2) 多个窗口
多个窗口,需要各自显示调用show()进行展示。
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('QWidget')
window.show()
label = QLabel()
label.setWindowTitle('QLabel')
label.show()
sys.exit(app.exec_())
执行如下:
1.6.2 子控件
创建控件时,传了控件对象,则创建的为子控件,子控件设置的窗口标题不生效,子控件调用show()不生效,必须由窗口调用show()才能展示。
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('QWidget')
# 创建label子控件,送window
label = QLabel(window)
# label子控件 setWindowTitle 不生效
label.setWindowTitle('QLabel')
label.setText('梯阅线条')
# 需要父控件显示调用show才有效
window.show()
sys.exit(app.exec_())
执行结果:
1.7 app.exec_()
通过app.exec_()执行程序,无限循环检测并接收用户的交互消息。
1.8 sys.exit
python的sys模块的exit函数,用于退出当前程序,并将status当作系统退出码。详细参考《python模块sys之exit》。
sys.exit(app.exec_())
app.exec_()传递给status。
若status为整数,将作为系统退出码。
若status为非整数,则status被打印,并且系统退出码置为1。
若status未送、或为None、或为0,则系统退出码为0,表示正常退出。
若status为非0,表示异常退出。
1.8.1 正常退出
关闭窗口,程序app正常退出,退出码为0。
(1) 启动程序
(2) 关闭窗口
(3) 退出码为0
关闭窗口,正常退出,退出码为0。