PySide6从0开始学习的笔记(一) 学前班

PySide6 是 Qt 框架的 Python 绑定库,用于开发跨平台(Windows/macOS/Linux/ 移动端等)图形界面(GUI)应用,核心优势是功能强大、性能稳定、跨平台兼容性强,且完全开源免费,适合从入门到企业级 GUI 开发。

不知不觉,使用PySide6做开发也有几年了,但是都是被工作所逼,用一点学一点,知识面零散而杂乱,也走了不少弯路。是时候系统学习和总结一次了。由于本人是业余程序员,错漏之处还望指教。


一、学习前置基础

  1. Python 基础:掌握变量、函数、类与面向对象(OOP)、模块导入等核心语法(PySide6 重度依赖类继承、实例化等 OOP 思想);
  2. Qt 核心概念认知:无需学 C++ Qt,只需初步了解 "控件(Widget)、布局(Layout)、信号与槽(Signal & Slot)" 三大核心 ------ 这是 PySide6 开发的灵魂。
  3. 有关pyside6的其他介绍,见:https://blog.csdn.net/xulibo5828/article/details/145307815
  • 面向对象(OOP)的名词解释:

二、环境搭建和基本框架

  • 安装pyside6,只需下面一条指令,简单直接,自动适配 Python 版本:
python 复制代码
pip install pyside6
  • 最简框架示例:
python 复制代码
import sys
from PySide6.QtWidgets import QApplication, QWidget

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

在pycharm中创建Python脚本并运行上面代码,会出现一个应用窗口:

这样就完成了一个最简的pyside6应用程序创建和运行。


三、基本代码的详解

1、app = QApplication(sys.argv)
python 复制代码
app = QApplication(sys.argv)
  • QApplication: 这部分创建了一个Qt应用程序对象。QApplication 是Qt框架中用于管理应用程序的类。
  • sys.argv: 是 Python 程序的标准命令行参数入口,Qt 官方文档(QApplication 文档)明确建议传入这个参数。app = QApplication(sys.argv)是作为一个规范用法存在的。

你可以做一个测试,在Windows下,将上述代码的sys.argv省去,写成app = QApplication()也是可以运行的;但是在有些版本的Linux下会运行出错。所以建议按照官方推荐使用。


  • sys.argv的规则如下:

sys.argv是一个列表,它的所有元素都是字符串。

**列表第 0 个元素(sys.argv[0]):**当前脚本本身的路径 / 文件名(是参数列表的固定第一个元素),这个参数任何时候都不要修改;

**列表第 1 个及以后元素(sys.argv[1:]):**运行脚本时手动传入的额外命令行参数。

验证一下:

python 复制代码
import sys
print(sys.argv)

以上代码打印的结果:

python 复制代码
['E:\\pyside6_new_baseDemo\\tmp\\tmp.py']

进一步的,简单体验一下自定义设置sys.argv参数:

python 复制代码
import sys
from PySide6.QtWidgets import QApplication, QWidget

# 自定义sys.argv:模拟传入Qt的-style参数
sys.argv = [sys.argv[0], "-style", "fusion"]  # 第0个元素保留脚本名,后续加自定义参数
window_style = sys.argv[2]

app = QApplication(sys.argv)  # Qt会解析修改后的sys.argv,应用fusion样式
window = QWidget()
window.setWindowTitle(f"{window_style}样式窗口")
window.show()
sys.exit(app.exec())

上面的-style是Qt 支持的命令行参数,它指定了窗口的显示风格,避免跨平台运行时显示风格的不一致。除了Qt 支持的命令行参数以外,sys.argv中也可以是自己定义的业务参数。比如:

python 复制代码
import sys
from PySide6.QtWidgets import QApplication, QWidget

# 自定义sys.argv:
sys.argv = [sys.argv[0], "-style", "windows", "mySize", "300"]  # 第0个元素保留脚本名,后续加自定义参数
window_style = sys.argv[2]  # 第2个元素是-style参数的值(QT自带)
window_size = int(sys.argv[4])  # 第4个元素是size参数的值(自定义的)

app = QApplication(sys.argv)  # Qt会解析修改后的sys.argv,应用fusion样式
window = QWidget()  # 创建窗口
window.setWindowTitle(f"{window_style}样式窗口")  # 设置窗口标题
window.resize(window_size, window_size)  # 设置窗口大小
window.show()  # 显示窗口
sys.exit(app.exec())  # 运行应用程序

运行的结果,显示了一个Windows风格的,尺寸是300*300的窗口。


2、window = QWidget()

这行代码是 PyQt/PySide 中的基础用法,核心作用是创建一个窗口对象,简要解析如下:

关键组成

QWidget**:** Qt 中所有可视化组件的基类(按钮、标签、窗口等都继承自它),本身可作为独立窗口(顶层容器)使用;

window**:**自定义的变量名,用于引用创建的窗口对象(后续可通过该变量操作窗口,如设置大小、标题、显示等);

QWidget()****: 调用 QWidget 的构造函数,创建实例 ------ 此处未传入父对象(parent=None 是默认值),因此它是一个顶层窗口(有标题栏、边框,可独立显示 / 拖动)。

  • 核心作用

创建一个 "空白的基础窗口容器",后续需通过代码补充功能,例如:

复制代码
window.setWindowTitle("我的窗口")  # 设置标题
window.resize(400, 300)          # 设置大小(宽400,高300)
window.show()                    # 显示窗口
  • 补充说明

若传入父对象(如 QWidget(parent=some_widget)),则它不再是顶层窗口,而是父组件内的 "子部件"(如窗口内的面板);

单独这一行代码不会显示窗口,必须调用 show() 方法才会渲染到屏幕;


3、window.show()

调用窗口的show()方法,将窗口从 "隐藏状态" 切换为 "显示状态",绘制到屏幕上。另外,在实践中发现,show()的作用不仅仅是显示,它可能还隐含有一些,比如显示参数设置等操作。见:

https://mp.csdn.net/mp_blog/creation/editor/137729182

所以,我现在的习惯是,创建了窗口实例之后就先将其show()一次,将其所有的特性全部加载设置到位,如果不需要它继续显示就紧跟着将其hide(),隐藏它。

4、sys.exit(app.exec())

这条指令分为两部分:app.exec()和sys.exit(),当程序执行外层的sys.exit()时,会首先遇到作为参数传递的app.exec():

  • app.exec() :app是之前创建的Qt应用程序对象,app.exec()的运行结果是启动 Qt 的事件循环(程序进入 "等待用户操作" 以及"刷新显示结果"的状态,如点击、拖拽、关闭窗口、刷新显示等事件都会被循环处理)。
  • **sys.exit():**当事件循环结束(比如用户关闭了所有窗口,或者app.exec()的运行出现了错误),app.exec()就会执行完毕并返回一个状态码,sys.exit()接收该状态码并正常终止程序,确保资源释放。

整体逻辑:创建应用 → 传递参数→创建窗口 → 显示窗口 → 启动事件循环等待交互 → 关闭后终止程序并释放资源,这就是 Qt GUI 程序的标准模板。


  • 附demo代码:

改变sys.argv参数后实际运行的显示风格的区别:

python 复制代码
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton
)

if __name__ == "__main__":
    # 自定义参数
    custom_argv = [sys.argv[0], "-style", "windows"]

    app = QApplication(custom_argv)

    # 构建带控件的窗口(而非空白窗口)
    window = QWidget()
    window.button = QPushButton("Click me!", window)   # 添加按钮
    window.resize(200, 100)

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

以及:

python 复制代码
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton
)

if __name__ == "__main__":
    # 自定义参数
    custom_argv = [sys.argv[0], "-style", "fusion"]

    app = QApplication(custom_argv)

    # 构建带控件的窗口(而非空白窗口)
    window = QWidget()
    window.button = QPushButton("Click me!", window)   # 添加按钮
    window.resize(200, 100)

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

运行截图对比:

相关推荐
shipship--4 小时前
htb academy笔记-module-Password Attacks(五)
笔记
EveryPossible4 小时前
优先级调整练习1
大数据·学习
逐辰十七4 小时前
FreeRTOS 中断管理 (Chapter 17) 核心学习大纲
学习
智行众维5 小时前
【用户心得】SCANeR™Studio学习笔记(六):人因工程Pack——一站式搞定驾驶模拟的多模态数据同步
笔记·学习·自动驾驶·汽车·仿真·scaner·人因工程
kissgoodbye20125 小时前
cadence学习之基础知识
网络·学习
xian_wwq5 小时前
【学习笔记】基于人工智能的火电机组全局性能一体化优化研究
人工智能·笔记·学习·火电
阿蒙Amon5 小时前
JavaScript学习笔记:6.表达式和运算符
javascript·笔记·学习
大筒木老辈子6 小时前
C++笔记---并发支持库(atomic)
java·c++·笔记
Cricyta Sevina6 小时前
Java Collection 集合进阶知识笔记
java·笔记·python·collection集合