PyQt5显示窗口

前言

PyQt5显示窗口教程介绍了用PyQt5创建窗口、设置标题、添加标签控件等步骤,并给出了示例代码。

通过PyQt5显示窗口来了解PyQt5程序的基本操作步骤,比如导入包模块,创建应用,创建窗口、控件,执行程序等。

1.1 效果

PyQt5显示窗口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文件。

PyQt5显示窗口2 执行结果返回参数列表,第1个元素为python文件名。

PyQt5显示窗口3

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”会自动进入解释器目录和项目目录。

PyQt5显示窗口4 命令行执行python,除了要执行的python文件外,还可以给python文件送入参,入参之间用空格分隔。

PyQt5显示窗口5

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”,结果如下:

PyQt5显示窗口6

1.5.2 全局获取

print(f'qApp.arguments()={qApp.arguments()}')

qApp是QtWidgets包初始化的一个全局变量,在__init__.py文件,如下:

qApp = QApplication()

执行有导入QtWidgets包的模块时会自动创建qApp,通过aApp.arguments()也可以获取命令行参数列表。

PyQt5显示窗口7

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_())

执行后,自动添加标题栏,标题栏下方的才属于控件部分。

PyQt5显示窗口8 (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_())

执行如下:

PyQt5显示窗口8

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_())

执行结果: PyQt5显示窗口9

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) 启动程序

PyQt5显示窗口11 (2) 关闭窗口

PyQt5显示窗口12 (3) 退出码为0

关闭窗口,正常退出,退出码为0。

PyQt5显示窗口13