前言
本文详细介绍如何在 Window 平台上用纯代码方式(不借助 Qt Designer 工具)来开发一个简单的 Qt for Python 入门 GUI 应用程序(含详细的代码解析),让读者有个基本的感觉,供各位 Qt for Python 的初学者们参考。
注:本系列将会以 PySide6 为例进行介绍,原则上同样适用于 PyQt6(只需将代码中导入语句的 PySide6 替换为 PyQt6 即可)。
1. 简介
既然开发环境已经准备就绪,那就让我们通过开发一个简单的示例程序来首次探索它。
本示例程序虽然简单,但会涉及到如下内容,希望能帮助初学者对使用 PySide6 开发 Python GUI 应用程序代码框架有个初步的印象。
- 如何导入 PySide6 模块(或类)
- 如何创建一个应用程序(QApplication)对象
- 如何创建一个标签(QLabel)对象作为主窗口,并在构造时设置其相关属性,使用 Qt 样式表设置标签属性。
- 如何设置主窗口(即标签)标题
- 如何显示主窗口(即标签)
- 如何运行应用程序
2. 示例目标及原型
我们确定该应用程序所设想达到的目的,并给出其原型。
一、示例目标:
本示例目标是创建一个 Python GUI 应用程序,其主窗体中(水平和垂直)居中显示一段蓝色的文本信息,随着窗口的拉伸,该文本大小、颜色保持不变,但其位置仍然在主窗体中保持(水平和垂直)居中。主窗体标题为“PySide6 示例程序”。
二、示例原型:
在进行 GUI 应用程序编码之前,一般建议先勾画出 GUI 框架(窗体及各部件的布局等)。本示例原型如下:
3. 示例代码及运行
一、编辑代码
利用代码编辑器编辑示例代码,并保存为文件(如:C:\MyPySide6\MyPySide6App1.py)。
- from PySide6.QtWidgets import (QApplication, QLabel)
- from PySide6.QtCore import Qt
- app = QApplication([])
- label = QLabel("用 PySide6 开发的第一个 GUI 应用程序!", alignment=Qt.AlignCenter)
- label.setStyleSheet("color: blu e; font: bold; font-size: 15px;")
- label.setWindowTitle("PySide6示例程序1")
- label.show()
- app.exec_()
二、运行程序
从控制台终端通过命令方式(或直接在 Visual Studio Code 上点击主窗体上运行按钮)来运行该示例程序(通常要先进入代码所在目录下):
C:\MyPySide6> python MyPySide6App1.py
顺利的话应该会出现以下程序窗口(可以试着拉伸一下窗口看看效果):
怎么样?感觉还不错吧,简简单单8行 Python 代码,就能生成一个看上去还凑合的 GUI 应用程序了。相信可以大大增强您接下来的 Qt for Python 开发之旅信心吧。
4. 代码解析
什么?上面的代码看不懂! 没关系,我们才刚起步,很多知识还没学呢。那下面我就对上述代码进行一个较为详细的解析,希望能帮助您理解和掌握这些代码。
(1)首先,导入相关模块(或类)
- from PySide6.QtWidgets import (QApplication, QLabel)
PySide6 模块中的子模块提供对相关 Qt API 的访问。由于本示例后续代码中会用到 PySide6.QtWidgets.QApplication 类和 PySide6.QtWidgets.QLabel 类,所以要从 PySide6.QtWidgets 模块导入 QApplication 类、QLabel 类。
注:还有其他几种导入方式:
注1:可以根据个人习惯选择具体的导入方式。本人倾向于选择最开始的导入方式。
- # 从PySide6.QtWidgets模块导入所有的类,后续代码可以直接使用相关类
- from PySide6.QtWidgets import *
- # 导入PySide6.QtWidgets模块,后续代码可以直接使用相关类
- import PySide6.QtWidgets
- # 从PySide6库中导入QtWidgets模块,后续代码在使用相关类时,需要加上该类对应的模块名
- from PySide6 import QtWidgets
(2)其次,创建一个应用程序对象
- app = QApplication( [] )
使用 QApplication 类创建一个应用程序实例对象app,括号内的[]表示构造时不含传递参数。
- 注1:QApplication 是管理 Qt GUI 应用程序的控制流程和主要设置的类。任何 Qt GUI 应用程序都必须包含一个 QApplication 类的实例对象。对于非 GUI 的 Qt 应用程序,可以使用 QCoreApplication 类。
- 注2:由于 Qt 可以从命令行接收参数,因此在构造时可以将任何参数传递给 QApplication 对象(但要注意需要导入 sys 模块)
- import sys
- app = QApplication( sys.argv )
(3)接着,创建一个标签对象作为主窗体
- label = QLabel("用 PySide6 开发的第一个 GUI 应用程序!", alignment=Qt.AlignCenter)
- label.setStyleSheet("color: blue; font: bold; font-size: 15px;")
通常会使用 QMainWindow 类、或 QWidget 类或 QDialog 类来创建一个应用程序的主窗体。本示例中为简化直接使用 QLabel 类创建一个标签对象 label 作为本应用程序的主窗体,并在构造时对该标签的内容和对齐方式进行初始化设置,然后使用 QLabel 类的 setStyleSheet() 方法设置标签文本的颜色、粗体和字体大小属性:
- ——文本内容:“用 PySide6 开发的第一个 GUI 应用程序!”
- ——文本位置:(水平和垂直)居中
- ——文本颜色:蓝色
- ——字体:粗体
- ——字体大小:15像素
(4)再接着,设置主窗体(即标签)标题
- label.setWindowTitle("PySide6 示例程序")
调用 QLabel 类的 setWindowTitle() 方法设置主窗体(即标签)的标题("PySide6 示例程序")。
(5)然后,显示主窗体(即标签)
- label.show()
调用 QLabel 类的 show() 方法来显示主窗体(即标签)。
(6)最后,运行应用程序
- app.exec_()
执行 QApplication 类的 exec_() 方法,将使得 Qt GUI 进入一个主事件循环,直到程序中调用 exit()、quit() 或关闭应用程序的主窗口时才会结束。
注:在主事件循环开始后,它将会接收用户界面事件以及其他事件源的事件,并向相应的窗口进行分发和处理。此外,它还完成 Qt 应用程序的初始化和应用程序运行结束后的善后处理,并提供会话管理。
结束语
本系列介绍如何在 Python 中使用 Qt for Python 进行 GUI 应用程序开发。