Python中的PySide6模块

2025年3月13日 | 阅读 10 分钟

在本文中,您将了解 PySide6 是什么,它的主要功能,以及如何轻松地将此工具集成到您的应用程序中,以创建出色、健壮、跨平台的 GUI 应用程序。还将通过基本示例和对主要组件的理解来发现 PySide6 是什么。

什么是 PySide6?

PySide6 是 Qt6 的 Python 包装器,它使用 C++ 框架为 Python 编程语言创建跨平台 GUI 应用程序。Qt for Python 是开源的,是 Qt Company 正式开发的 Qt for python 项目的一部分。该工具对于希望创建高性能、最重要的是稳定桌面应用程序的 Python 开发人员来说是最新的。

PySide6 是一个跨平台的 GUI 框架,适用于 WindowsmacOSLinux 上的应用程序,它可以通过 Python 代码访问整个 Qt 框架,如 UI 组件、多媒体框架、数据库连接和 Qt 网络模块。跨平台开发之所以非常重要,是因为它允许开发人员编写的代码可以在其他操作系统(如 Windows、MacOS、Linux 和移动开发)上使用。

PySide6 的主要特点

以下是 PySide6 的一些特点:

  1. 跨平台 GUI 开发: PySide6 意味着开发人员可以开发一个单一的代码,用于创建 Windows、macOS、Linux 和其他应用程序,而无需适应在不同系统中运行。这对于希望使用单一代码库将应用程序部署到不同环境的开发人员来说尤其有利。
  2. 丰富的控件集合: PySide6 中的大多数控件都已包含在打包版本中;这些控件包括按钮、文本框、标签、表格等。这些控件使得无需从头开始实现即可构建包含足够元素的现代 GUI。例如:
    1. QPushButton:用于创建按钮
    2. QLabel:用于显示文本和图像
    3. QTableView:用于显示表格数据
  3. 原生外观和感觉: 使用 PySide6 构建的应用程序会适应操作系统的原生外观和感觉,为用户提供熟悉的体验。这样做的目的是为任何应用程序增添专业气息,使其能够很好地融入周围环境。
  4. 模型-视图-控制器 (MVC) 架构: PySide6 新增了对 MVC 架构模型(假设将数据(模型)、界面(视图)和控制器进行划分)的支持。这种设计模式允许应用程序更好地组织和扩展,尤其是在复杂项目中。
  5. 信号与槽(事件处理): 这是一种事件处理技术,是 Qt 框架的一部分,PySide6 使用它来完成这项工作,它涉及发出称为信号的事件,然后存在一个或多个能够捕获这些事件的处理程序(称为槽)。这有助于控制或监视可能发生的活动,例如按钮点击、按键按下或鼠标移动。
  6. 灵活 UI 设计的布局: PySide6 中的布局包括 `QVBoxLayout`、`QHBoxLayout`、`QGridLayout` 等,这使得在窗口中创建控件的自适应和动态设计变得非常容易。这使开发人员能够创建复杂的窗口用户界面,这些界面对调整大小以及大小变化敏感。
  7. 图形和多媒体支持: 借助 PySide6,您可以创建与复杂多媒体对象(如图像、声音或电影)交互的应用程序。它还通过 QPainter 和 Qt3D 模块支持 2D 和 3D 图形,因此可用于游戏或设计应用程序。
  8. 自定义和样式: Qt 样式表 (QSS) 可供开发人员用于更改应用程序的外观,这与 Web 开发中使用的 CSS 没有太大区别。这当然使得修改控件和完整应用程序/服务的外观和感觉变得容易,而不会改变它们的功能。
  9. 多线程: PySide6 支持线程,这意味着开发人员可以运行后台操作(如文件处理或网络操作),同时 GUI 保持冻结状态。
  10. PySide6 有助于与 sqlite、mysql 或 postgresql 等数据库进行应用程序集成。借助 QSqlDatabase 类,可以轻松访问关系数据库。它还包含处理各种文件格式,包括 JSON、XML、CSV,从而使数据处理更加方便。
  11. 网络: PySide6 内置支持网络功能,包括发出 HTTP 请求、处理网络连接以及使用 WebSockets。这对于需要 Internet 连接或需要与 Web 服务和 API 交互的应用程序非常有用。
  12. 国际化 (i18n): PySide6 使用 Qt 的翻译工具,可以轻松地为不同语言和地区本地化您的应用程序。这允许创建多语言应用程序,使您的软件能够被全球用户访问。
  13. 支持自定义控件: 如果内置控件不能满足应用程序的要求,开发人员可以通过继承 QWidget 类并实现自己的功能和设计来创建自定义控件。
  14. 文档和社区支持: 作为 Qt6 的官方 Python 绑定,PySide6 拥有广泛的文档和庞大而活跃的社区。这确保开发人员在构建应用程序时可以获得最新的资源和支持。

代码示例:一个基本的 PySide6 应用程序

下面是一个简单的 PySide GUI 应用程序,它会在应用程序运行时打开一个带有按钮的窗口:单击按钮后,将在控制台显示一条特定消息。

输出

PySide6 Module in Python
 
Button clicked!

代码解释

  • 导入必要的模块
    • `sys`:用于查看命令行开关和执行 Python 终端上的操作。
    • 从 `PySide6.QtWidgets` 导入 `QApplication`、`QPushButton` 和 `QMainWindow`:这是创建窗口和为窗口添加按钮等控件所需的基本 PySide6 模块。
  • 创建 `QMainWindow` 的子类: 第二个类 `MainWindow` 继承自 `QMainWindow` 类,它是应用程序的主窗口。它充当其他控件(如按钮)的容器。
  • 设置窗口标题: `setWindowTitle("Basic PySide6 Window")` 函数将主窗口的标题设置为 "Basic PySide6 Window"。
  • 创建 QPushButton: Click Me! 创建了一个 `QPushButton` 控件。并使用 `self.setCentralWidget(button)` 函数将其设置为 QMainWindow 的中心控件。中心控件是许多窗口设计和布局的主要控件。
  • 将按钮连接到事件处理程序: "button_clicked.connect(self.button_clicked)" 是按钮的信号连接到 `button_clicked` 方法。这意味着每当按钮被点击时,都会运行一个名为 `button_clicked` 的函数。
  • 定义按钮点击事件: 对于按钮,以 `button_clicked` 方法的形式创建了一个操作,该方法在按下按钮时会在控制台打印 `button_clicked`。
  • 创建 `QApplication` 的实例: `QApplication` 是管理 GUI 应用程序事件循环的核心类。它接受 `sys.argv` 作为参数来处理命令行参数(如果有)。
  • 创建并显示主窗口: 创建 `MainWindow` 类型的实例变量(`MainWindow__ window =MainWindow()`)并调用 `show()` 函数将窗口显示在屏幕上。
  • 启动事件循环: `app.exec_()` 调用事件循环,该循环等待某些事件(按钮或按键等)发生,并使应用程序保持运行状态,直到窗口关闭。

PySide6 的主要组件

在使用 PySide6 在 Python 中开发 GUI 应用程序时,三个组件在应用程序的结构和功能中起着至关重要的作用:它用于许多类,包括 QApplication、QMainWindow 和 QWidget。本文将讨论这些组件,以及使用 PySide6 创建窗口的基本示例。

QApplication

`QApplication` 类是任何 PySide6 应用程序的骨干。它管理应用程序的控制流和主要设置。它之所以重要,原因如下:

  • 应用程序上下文: `QApplication` 创建一个应用程序上下文,您的 GUI 在其中运行。此上下文包含应用程序范围的设置和信息。
  • 事件循环: 它启动事件循环,该循环等待单击和按键事件发生,并确保 GUI 始终可操作。
  • 单实例: 每个应用程序只允许一个 `QApplication` 实例。它应该在任何其他 GUI 组件之前创建。

示例

QMainWindow

因此,`QMainWindow` 类是另一个从基类 `QWidget` 派生的控件,设计为主应用程序窗口。它构成了构建复杂的 OLE(对象链接与嵌入)模块的基础,这些模块包含工具、菜单和状态栏。

  • 中心控件: 使用 `QMainWindow`,您可以设置中心控件——窗口中心的区域,您可以在其中添加应用程序内容(按钮、文本字段等)。
  • 菜单栏和工具栏: 它支持创建菜单和工具栏作为标准功能,以改善用户导航体验。
  • 状态栏: `QMainWindow` 可以有一个状态栏,用于向用户显示消息或状态更新。

示例

QWidget

`QWidget` 是 PySide6 UI 部分的基本项,它包含了几乎所有的项。它也是派生用户界面或图形用户界面的不同对象的基类。

  • 自定义控件: 如果所需的控件在控件库中不可用,只需派生 `QWidget` 即可轻松创建并完全自定义。
  • 布局管理: 可以将布局应用于控件,从而使设计人员能够创建响应式和自适应控件。
  • 事件处理: `QWidget` 支持事件处理,使开发人员能够响应用户交互。

示例

使用 PySide6 创建基本窗口

让我们将这些组件组合起来创建一个简单的 PySide6 应用程序,该应用程序显示一个基本窗口。

代码

输出

PySide6 Module in Python

代码解释

  • 导入模块:我们首先从 PySide6 导入必要的类。
  • 初始化 QApplication:创建一个 `QApplication` 实例来管理应用程序。
  • 创建 QMainWindow:创建一个主窗口并配置其标题和大小。
  • 设置中心控件:将一个 `QWidget` 设置为主窗口的中心控件,该控件将容纳我们的布局和控件。
  • 创建布局:创建一个垂直框布局 (`QVBoxLayout`) 并将其分配给中心控件,以组织按钮。
  • 添加按钮:创建一个标有 "Click Me!" 的按钮并将其添加到布局中。
  • 显示窗口:使用 `show()` 方法显示主窗口。
  • 启动事件循环:最后,启动事件循环,允许应用程序处理用户交互。

PySide6 模块的优点

  1. Python 友好: 它将 Qt6 的强大功能带入 Python,允许开发人员使用 Python 易于学习的语法编写复杂的 GUI 应用程序。
  2. 官方支持: PySide6 得到 Qt 公司的官方支持,确保及时发布和文档。
  3. 面向对象设计: Qt 具有非常适合面向对象的架构结构,因此为处理复杂的应用程序提供了更好的支持。
  4. 快速原型开发: Python 为您提供了一种简单易学的语言,而 Qt 则为您提供了一个强大的工具包,让您可以快速原型开发和生产应用程序。
  5. 支持多个 Python 版本: PySide6 支持不同的 Python 版本,包括 Python 3.7 及更高版本。
  6. Python 生态系统集成: 您可以将 PySide6 与其他流行的 Python 库(如 NumPy、Pandas)结合使用,以构建专业应用程序,例如科学工具。
  7. 开源免费: PySide6 是免费的,并在 LGPL 许可证下分发,允许企业和其他用户开发开源应用程序以及专有软件,而无需支付许可证费用。
  8. 访问 Qt 工具: PySide6 使您能够使用 Qt Designer 等软件,该软件用于以图形方式设计 GUI,然后将其与 Python 集成。
  9. 活跃开发: 不断添加新功能,以跟上最新的 Qt6 更新。
  10. 从 C++ 轻松过渡: 如果您熟悉 C++ 中的 Qt,那么在 Python 中过渡到 PySide6 会相对简单,因为 PySide6 非常接近 Qt 的结构。
  11. 与外部 API 良好集成: PySide6 与外部 API(包括基于 Web 的 API)配合良好,可以轻松创建与 Web 服务交互的应用程序。

PySide6 模块的缺点

  1. 陡峭的学习曲线: 虽然 Python 简单,但 Qt 的复杂性可能会让初学者感到不知所措。
  2. 社区规模小于 PyQt: PyQt 更成熟,社区更大,这意味着您可能比 PySide6 找到更多 PyQt 的教程和资源。
  3. 简单应用程序的开销过大: 对于小型、简单的应用程序,由于其庞大的功能,PySide6 可能会显得“杀鸡用牛刀”。
  4. 二进制文件大小大: 使用 PySide6 构建的应用程序可能相对较大,因为 Qt 框架本身就很重。
  5. 许可证差异: 尽管是开源的,PySide6 仍处于 LGPL 许可证下,这可能不如 PyQt 的许可证选项灵活,适合所有用例。
  6. 构建时间长: 由于它建立在 C++ 库 (Qt) 之上,因此 PySide6 项目在打包或部署时可能需要更长的编译时间。
  7. 缺乏移动支持: 尽管 Qt6 支持移动平台,但 PySide6 的移动支持仍然非常有限。
  8. 第三方教程较少: 与 Tkinter 或 PyQt 相比,PySide6 的第三方教程可能较少。

结论

PySide6 是一个强大且易于使用的库,用于在 Python 中构建桌面应用程序。其跨平台性质和丰富的特性集使其成为初学者和经验丰富的开发人员的绝佳选择。