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 PluginsIntegrating 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 也可以用于编写自包含的扩展模块,即无需封装库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343