news 2026/4/18 3:16:21

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 版本:
pip install pyside6
  • 最简框架示例:
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)
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:]):运行脚本时手动传入的额外命令行参数。

验证一下:

import sys print(sys.argv)

以上代码打印的结果:

['E:\\pyside6_new_baseDemo\\tmp\\tmp.py']

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

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中也可以是自己定义的业务参数。比如:

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中的基础用法,核心作用是创建一个窗口对象,简要解析如下:

  • 关键组成

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

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 程序的标准模板。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:14:49

python学习第6天

generator 生成器: 如果列表元素可以按照某种算法推算出来,,,不必创建完整的list,,一边循环一边计算,,,就叫生成器,generator 生成式:一次性全部打印出来 ne…

作者头像 李华
网站建设 2026/4/16 12:14:49

Postman + DeepSeek:接口测试效率革命 - 自动化用例生成与断言编写

Postman DeepSeek:接口测试效率革命 - 自动化用例生成与断言编写引言:接口测试的现状与挑战在当今快速迭代的软件开发环境中,应用程序编程接口已成为系统间通信和数据交换的基石。无论是微服务架构、前后端分离,还是与第三方服务…

作者头像 李华
网站建设 2026/4/16 14:11:30

ECS系统入门手记——其一

观前须知 ECS是一种用于处理大量运算,性能极高的架构,在某些特定的情况下可能发挥很大作用,由于所蕴含的知识很多,而我只粗学了10多个小时,某些地方可能会有纰漏,看不懂或者讲错了直接喷 注:需要导入的一些…

作者头像 李华
网站建设 2026/4/16 14:11:30

JAVA 中dao层的实体应该属于哪个层次VO,还是DTO,或者其他

在Java项目中,DAO层的实体通常指的是PO(Persistent Object,持久化对象)​ 或Entity(实体类),而不是DTO或VO。以下是详细解释:1. PO(持久化对象) / Entity与数…

作者头像 李华
网站建设 2026/4/16 12:24:53

AutoGLM 旧安卓一键变 AI 手机:安装与使用指南

📱 AutoGLM: 让你的旧安卓手机秒变 AI 代理!🚀 本文将为您提供一份“保姆级”指南,详细介绍如何安装、配置并使用 Open-AutoGLM,将您的安卓手机(Android 7.0)轻松变为一个强大的 AI 代理。 1️…

作者头像 李华