当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/84252/

相关文章:

  • 祝贺C++40周年
  • 毕业设计实战:基于SpringBoot的校友管理系统设计与实现,社交+招聘功能避坑指南!
  • 解决Ubuntu/Linux/Gnome 打开文件慢,使用chrome打开文件更慢/卡死问题
  • 光伏电站并网后如何玩转虚拟同步机?储能如何优雅地削峰填谷?今天咱们用Simulink搭个实战模型,拆解光储联合系统中的三大核心技能
  • 50040_基于微信小程序的项目管理系统
  • python学习第6天
  • 互联网大厂Java求职者面试技术深度文章示例
  • Electron应用自动更新与跨平台部署实战指南
  • 3步极速部署PLabel:智能标注系统的实战指南
  • Capacitor跨平台开发终极指南:用Web技术构建原生应用
  • 毕业设计实战:基于SpringBoot的线上医院挂号系统,并发与业务逻辑避坑指南!
  • Player.js 终极指南:轻松掌控网页视频播放
  • 终极指南:如何用PIKE-RAG打造领域专属的智能问答系统
  • RocketMQ如何防止消息丢失?
  • 009.数组排序
  • 征程 6P/H 计算平台部署指南
  • DevOps从入门到精通:企业级实战系列(二)——企业级代码管理策略深度解析
  • EtherCAT 逐帧报文解析:EEPROM 读取与配置阶段
  • Linux下的网络管理
  • JavaEE:多线程基础,多线程的创建和用法 - 实践
  • 8051U深度入门到32位51大型实战
  • One last NOIP
  • 实用指南:如何用 HTML 生成 PC 端软件
  • CF359D Pair of Numbers
  • 06_C 语言进阶之避坑指南:字符串与 char 指针 —— 从内存本质避开那些致命陷阱
  • End.
  • Hdlbits
  • CARLA自动驾驶仿真环境搭建与DEMO详解
  • 【Batch】提取文件名批量写入txt文件
  • 吐血整理,装修前的灵魂拷问!口碑炸裂的装修公司大盘点 - 品牌测评鉴赏家