PyQt5 系统化学习: 架构简介

参考 zetcode[1] 与 PyQt v5.15.0 Reference Guide/Introduction¶

1 架构简介

Qt 是一组 C++ 库和开发工具,包括用于图形用户界面,网络,线程,正则表达式,SQL数据库,SVG,OpenGL,XML,用户和应用程序设置,定位和位置服务,短距离通信( NFC 和蓝牙),网页浏览,3D 动画,图表,3D 数据可视化以及与应用商店的接口。PyQt5 将这些类中的 1000 多个实现为一组 Python 模块。

PyQt5 是 Digia 的一套 Qt5 与 Python 结合的可以在 Unix, Windows, and Mac OS 这些主流平台运行的应用框架。PyQt5(PyQt5 官方网站:https://www.riverbankcomputing.com/software/pyqt/,模块介绍的官网地址是:https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html)。

Python 如此强大的功能之一就是能够采用 C 或 C++ 编写的现有库,并将它们用作 Python 扩展模块。这种扩展模块通常称为库的绑定(bindings for the library)。PyQt5 是使用 SIP 绑定生成器(SIP bindings generator,细节可参考 SIP documentation)构建的。必须安装 SIP[2] 才能构建和使用 PyQt5。可以使用 pip 从 Python 软件包索引中安装 SIP。即:

$ pip install sip

PyQt5 包含能够使用 Python 代码扩展的插件:Qt Designer 和 qmlscene。有关详细信息,请分别参见 Writing Qt Designer Plugins 和 Integrating Python and QML。

PyQt5 还包含许多实用程序(utility programs):

  • pyuic5 对应于 Qt 的 uic 实用程序。它可以将使用 Qt Designer 基于 QtWidgets 创建的 GUI 转换为 Python 代码。
  • pyrcc5 对应于 Qt rcc 实用程序。它在 Python 模块中嵌入由资源收集文件描述的任意资源(例如,图标,图像,翻译文件)。
  • pylupdate5 对应于 Qt lupdate 实用程序。它从 Python 代码中提取所有可翻译的字符串,并创建或更新 .ts 转换文件。然后,Qt Linguist 使用它们来管理这些字符串的翻译。

DBus 支持模块安装为 dbus.mainloop.pyqt5。该模块以与标准 dbus-python 绑定软件包中随附的 dbus.mainloop.glib 提供对 GLib 事件循环的支持相同的方式,为 Qt 事件循环提供支持。该 API 在 DBus支持 中进行了描述。仅当安装了 dbus-python v0.80(或更高版本)绑定软件包时,该选项才可用。QtDBus 模块为 DBus 提供了更 Qt-like 的接口。

配置 PyQt5 后,将生成一个名为 PyQt5.api 的文件。QScintilla 编辑器组件可以使用它来在编辑 PyQt5 代码时启用自动完成和调用提示。如果已经安装 QScintilla,则会自动安装该 API 文件。

PyQt5 包含大量示例。这些是 Qt 提供的许多 C++ 示例的 Python 端口。它们可以在示例目录中被找到。PyQt5 包含 SIP 用来生成 PyQt5 本身的 .sip 文件。开发人员可以将其用于其他基于 Qt 的类库的绑定。

PyQt5 主要包含如下模块(去除了已经弃用的模块):

模块名 描述
QtCore 包含了核心的 non-GUI functionality。用于处理时间,文件和目录,各种数据类型,streams,URL,QMimeData,线程或进程。
QtGui 包含用于窗口系统集成,事件处理,2D图形,基本图像,字体和文本的类。它是小部件和 OpenGL GUI 共有的核心类。
QtWidgets 包含提供一组 UI 元素的类,以创建经典的桌面样式用户界面。
QtDesigner 所包含的类允许使用 PyQt 扩展Qt Designer。
sip 绑定开发人员和用户的实用程序。
uic 用来处理 .ui 文件,该文件由 Qt Designer 创建,用于描述整个或者部分用户界面。它可以将 .ui 文件编译为 .py 文件,以便其他 Python 程序调用。
QtLocation 用于创建映射应用程序的类。
QtMultimedia 包含用于处理多媒体内容的类和用于访问相机和 Radio Functionality 的 API。
QtMultimediaWidgets 提供额外的与多媒体相关的小部件和控件(widgets and controls)。
QtBluetooth 包含用于蓝牙设备连接和交互的类。
QtChart 支持 2D 图表创建的类。
QtDBus 使用 D-Bus 协议支持 IPC 的类。
QtDataVisualization 支持 3D 数据可视化的类。
QtNetwork 模块包含用于网络编程的类。这些类通过使网络编程更加容易和可移植,来简化 TCP / IP和 UDP 客户端和服务器的编码。
QtNetworkAuth 网络授权类。
QtPositioning 包含用于通过使用各种可能的来源(包括卫星,Wi-Fi 或文本文件)确定位置的类。
QtWebChannel 在 Python 和 HTML / JavaScript 之间进行点对点通信的类。
QtWebEngine 用于将 QML Web Engine 对象与 Python 集成的类。
QtWebEngineCore Web 引擎的核心类。
QtWebEngineWidgets 基于 Chromium 的 Web 浏览器。
QtWebSockets 包含实现 WebSocket 协议的类。
QtSvg 提供用于显示 SVG 文件内容的类。可缩放矢量图形(Scalable Vector Graphics,简写为 SVG)是一种用于描述 XML 中的二维图形和图形应用程序的语言。
QtSql 提供用于处理 SQL 数据库的类。
QtTest 包含启用 PyQt5 应用程序的单元测试的功能。
QtHelp 包含了用于创建和查看可查找的文档的类。
QtWinExtras 特定于 Windows 的附加类。
QtX11Extras 特定于 X11 的附加类。
QtAndroidExtras 特定于 Android 的附加类。
QtMacExtras 特定于 macOS 和 iOS 的附加类。
QtXml 包含用于处理 XML 文件的类。该模块提供了 SAX 和 DOM API 的实现。
QtXmlPatterns 所包含的类实现了对 XML 和自定义数据模型的 Xquery 与 XPath 的支持。
Qt3DCore 支持 near-realtime 仿真系统的核心类。
Qt3DInput 使用 Qt3D 时处理用户输入的类。
Qt3DLogic 启用帧同步(frame synchronization)的类。
Qt3DRender 启用 2D 和 3D 渲染(rendering)的类。
Qt3DExtras Qt3D 一起使用的预构建元素。
Qt3DAnimation 在仿真(simulation)中支持动画的类。
Qt 将上面模块中的类综合到一个单一的模块中。这样做的好处是你不用担心哪个模块包含了哪个特定的类;坏处是加载到整个 Qt 框架中,从而增加了应用程序的内存占用。
QAxContainer 用于访问 ActiveX 控件和 COM 对象的类。
QtNfc 支持支持 NFC 的设备之间的连接的类。
QtPrintSupport 使打印更轻松,更便携的类。
QtPurchasing 支持从应用程序商店进行应用程序内购买的类。
QtQml 与 QML 语言集成的类。
QtQuick 使用 Python 代码扩展 QML 应用程序的类。
QtQuick3D 渲染 3D Qt Quick 内容的类。
QtQuickWidgets 用于在传统小部件中渲染QML场景的类。
QtRemoteObjects 在进程或系统之间共享 QObject API 的类。
QtSensors 用于访问系统的硬件传感器的类。
QtSerialPort 用于访问系统串行端口(serial ports)的类。

PyQt5 只支持最新风格的信号和槽的写法。SIGNAL()SLOT() 的调用将不会被长时间支持。


  1. 这个教程比较好的地方是,能讲解每一段代码的含义 ↩

  2. SIP 是自动为 C 和 C ++ 库生成 Python 绑定的工具。SIP 最初于 1998 年为 PyQt(Qt GUI工具包的Python绑定)开发,但适用于为任何 C 或 C ++ 库生成绑定。SIP 也可以用于编写自包含的扩展模块,即无需封装库。 ↩

你可能感兴趣的:(PyQt5 系统化学习: 架构简介)