亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

PyQt5 综合教程:构建专业级 Python GUI 应用

什么是 PyQt?

PyQt 是 Qt 框架的 Python 绑定,Qt 是跨平台 C++ 库,用于在 Windows、macOS、Linux、Android、iOS、树莓派等创建原生 GUI 应用。绑定由 Riverbank Computing (英国) 维护,Qt 本身由 The Qt Company (芬兰) 开发。PyQt 让 Python 开发者访问 Qt 丰富的控件、网络、数据库、3D、多媒体能力。

本教程你将学习:

PyQt5 核心特性

PyQt5 暴露 600 多个类,覆盖:

这些能力使开发者能构建复杂、高性能的桌面和嵌入式应用。LG、梅赛德斯-奔驰、AMD、松下、Harman 等大企业依赖 Qt 构建 UI 技术栈。

PyQt 版本

Riverbank Computing 提供两个主要绑定:

此外,PyQt3D 提供 Qt3D 框架的 Python 绑定,适用于实时 3D 渲染和仿真。

安装 PyQt5

介绍两种常用安装方式。推荐使用 wheel 包,因其包含编译好的 C++ 二进制文件,避免漫长构建过程。

方法 1:通过 Wheel 安装(推荐)

  1. 打开终端或命令提示符。
  2. 运行 pip install PyQt5 下载 wheel(约 50 MB)。
  3. 验证安装成功完成。

Windows 示例:

PyQt5 综合教程:构建专业级 Python GUI 应用
pip install PyQt5

安装后即可导入 PyQt5.QtWidgets 开始构建应用。

方法 2:从源码构建

源码构建更复杂,需编译 C++ 代码。仅在需要自定义修改或平台无 wheel 时使用。

PyQt5 编程基础

下面最小示例打开 300×300 窗口,标题 “Guru99”。每行附注释:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

解释:

添加交互

下例添加标签、按钮、点击弹出消息框,演示信号与槽——Qt 事件系统核心。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all‑knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Behold the Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Beheld", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

点击按钮触发 dialog(),创建模态 QMessageBox。

核心组件与控件

PyQt5 架构组织为多个模块,理解层级有助于按需导入。

模块概览

常用控件

布局管理

不手动用 move() 和 resize() 定位,Qt 提供布局管理器根据窗口大小自动排列控件。

盒布局 (HBox & VBox)

QHBoxLayout 水平排列;QVBoxLayout 垂直排列。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

将 QHBoxLayout 替换为 QVBoxLayout 即垂直堆叠按钮。

网格布局

二维网格排列控件。addWidget() 接受行列索引及可选跨行跨列参数。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

自定义主题与样式

PyQt5 支持原生主题和自定义样式表。

内置主题

用 app.setStyle("Fusion") 或其他可用样式设置应用风格。

app = QApplication([])
app.setStyle("Fusion")

调色板定制

用 QPalette 程序化修改控件颜色。

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt 样式表 (CSS-like)

高级样式直接应用样式表到控件或整个应用。

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

核心要点

Python

  1. C# 集合实战教程:ArrayList、Stack、Queue、Hashtable 等核心类型全解析
  2. Python print() 函数完全指南:基础用法、空行打印与自定义结束符
  3. Python str.count() 完全指南:统计字符与子串出现次数实战
  4. Python format() 字符串格式化完全指南:占位符、格式化规范、类与字典应用
  5. Python 字符串 find() 方法完全指南:语法、参数、替代方案与计数技巧
  6. 精通 Python Lambda 函数:实用示例与最佳实践
  7. Python round() 函数详解与实战示例
  8. 精通 Python map() 函数:语法、示例与最佳实践
  9. Python timeit():精准测量代码执行时间与实战示例
  10. Python collections.Counter:高效计数、更新与算术运算
  11. 理解 Python type() 与 isinstance():实战示例详解
  12. Python list.count() 专家指南:语法、示例与性能解析