PyQt5 常用模块(对应Qt五大模块)

PyQt5把Qt各个组件分模块,90%开发只用到下面这几个,不用全部学。

python 复制代码
# 最常用
from PyQt5 import QtWidgets, QtCore, QtGui

# 较少用
from PyQt5 import QtMultimedia, QtSerialPort, QtNetwork

1. QtWidgets【最重要,占日常70%】

所有可视化控件全部在这里,做界面必导入。

常用类:

  • 基础窗口:QApplicationQWidgetQMainWindow(主窗口,带菜单栏状态栏)、QDialog弹窗对话框
  • 控件:QPushButton按钮、QLabel标签(可显示文字/图片)、QLineEdit单行输入框、QTextEdit多行文本
  • 选择控件:QCheckBox复选框、QRadioButton单选框、QComboBox下拉框
  • 布局管理器(非常关键):
    QVBoxLayout垂直布局、QHBoxLayout水平布局、QGridLayout网格布局
  • 弹窗:QMessageBox消息弹窗、QFileDialog文件选择对话框
  • 表格列表:QTableWidget表格、QListWidget列表
python 复制代码
from PyQt5.QtWidgets import (QMainWindow,QPushButton,QLabel,QVBoxLayout,
                             QMessageBox,QFileDialog,QTableWidget)

2. QtCore【核心非GUI模块,重中之重】

没有界面,但是Qt灵魂,信号槽、定时器、线程、常量都在这里。

常用:

  1. 信号槽pyqtSignal自定义信号,跨线程通信必备
  2. QThread:Qt线程,上位机开发最高频,处理相机、串口、网络,防止UI卡死
  3. QTimer定时器:周期性执行函数(定时刷新界面、轮询设备)
  4. QObject:所有Qt类的基类
  5. Qt:枚举常量,对齐方式、按键、颜色标记
  6. QPoint/QSize/QRect:坐标、尺寸、矩形
python 复制代码
from PyQt5.QtCore import QThread, pyqtSignal, QTimer, Qt

⚠️重点:耗时操作(读相机、串口接收、大文件解析)放到QThread绝对不要阻塞主线程事件循环

3. QtGui 绘图、图像、字体

负责画图、图片处理、画笔、字体,不负责控件。

常用类:

  • QPixmap:图片,适合给QLabel显示图像(海康相机/OpenCV图片转这个)
  • QImage:图像,和OpenCV Mat互相转换用
  • QPainter:绘图,画线、画框、画文字,在界面上画检测框
  • QFont字体、QColor颜色

视觉上位机高频:OpenCV Mat → QImage → QPixmap → QLabel显示。

python 复制代码
from PyQt5.QtGui import QPixmap, QImage, QPainter, QColor

4. QtSerialPort【工业项目高频:串口】

串口通信模块,单片机、PLC串口调试。

python 复制代码
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
  • QSerialPort:打开串口、收发数据
  • QSerialPortInfo:枚举本机所有串口

5. QtNetwork 网络通信

TCP/UDP客户端、服务端。

  • QTcpSocket TCP客户端
  • QTcpServer TCP服务端

你之前C++写TCP服务端,PyQt可以用这套,自带信号槽,不用自己写select。

python 复制代码
from PyQt5.QtNetwork import QTcpSocket, QTcpServer

6. QtMultimedia 多媒体(较少用)

音视频播放,一般工业软件很少用。


极简总结(按你的场景:视觉/工业上位机)

模块 用途 你的项目是否必用
QtWidgets 窗口、按钮、表格、布局 ✅必用
QtCore 信号、QThread线程、定时器 ✅必用
QtGui 图片、绘图(画YOLO检测框) ✅必用
QtSerialPort 串口单片机通信 ⭐经常用
QtNetwork TCP通信 ⭐经常用

最经典的导入模板(直接复制)

python 复制代码
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton,
                             QLabel, QVBoxLayout)
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from PyQt5.QtGui import QPixmap, QImage

开发上位机的固定套路

  1. QtWidgets搭建UI界面
  2. 相机/网络/串口耗时逻辑放到QtCore.QThread子线程
  3. 子线程通过pyqtSignal把图片、数据抛回主线程更新UI
  4. QtGui做图像转换,在label显示图片、绘制识别框
  5. 需要串口用QtSerialPort,TCP用QtNetwork

坑提醒:子线程禁止直接操作任何QtWidgets控件,只能通过自定义信号把数据传到主线程更新界面。

PyQt5 三大核心模块常用类 + 常用方法说明

三大模块:QtWidgetsQtCoreQtGui

一、PyQt5.QtWidgets 界面控件模块

所有可视化窗口、按钮、输入框、布局、弹窗;开发GUI最主要模块

常用类 常用成员/函数 说明
QApplication exec_() 启动Qt主事件循环,阻塞等待界面事件
quit() 退出应用程序
QWidget show() 显示控件/窗口
hide() 隐藏控件
resize(w,h) 设置窗口大小
setWindowTitle("xxx") 设置窗口标题
setLayout(layout) 给控件设置布局管理器
setParent(parent) 设置父对象(Qt内存管理)
QMainWindow setCentralWidget(widget) 设置主窗口中心部件
statusBar().showMessage("msg") 底部状态栏显示提示文字
QPushButton 按钮 setText("按钮") 设置按钮显示文字
clicked 信号,点击触发
setEnabled(bool) 设置按钮是否可点击
QLabel 标签 setText("文字") 设置显示文本
setPixmap(pixmap) 显示图片(传入QPixmap)
setAlignment(Qt.AlignCenter) 文字/图片居中对齐
QLineEdit 单行输入框 setText() 设置输入框内容
text() 获取输入框字符串
clear() 清空内容
textChanged 信号:文本发生变化
QTextEdit 多行文本框 append("xxx") 追加一行文字(日志输出非常常用)
toPlainText() 获取全部文本
clear() 清空
QComboBox下拉框 addItem("选项1") 添加下拉选项
currentText() 获取当前选中字符串
currentIndexChanged 信号,选中改变
布局:QVBoxLayout addWidget(widget) 往布局添加控件,垂直排列
addStretch() 添加弹性占位,撑开空白
setSpacing() 控件之间间距
布局:QHBoxLayout addWidget(widget) 水平排列控件
布局:QGridLayout addWidget(w,行,列) 网格布局,表格摆放控件
QMessageBox消息弹窗 information(父,"标题","内容") 普通信息弹窗
warning() 警告弹窗
critical() 错误弹窗
question() 是/否询问弹窗,返回点击结果
QFileDialog文件对话框 getOpenFileName() 选择单个文件,返回文件路径
getExistingDirectory() 选择文件夹
QTableWidget表格 setRowCount() 设置行数
setColumnCount() 设置列数
setItem(row,col,item) 设置单元格内容

二、PyQt5.QtCore 核心非GUI模块

无界面,Qt底层灵魂:信号槽、线程、定时器、坐标、常量

常用类 常用成员/函数 说明
pyqtSignal pyqtSignal(类型) 自定义信号,可携带参数;跨线程通信核心
.connect(回调函数) 信号绑定回调函数
.emit(数据) 发射信号,触发绑定的函数
QThread start() 启动子线程,自动调用run()
run() 重写此函数,放子线程耗时业务逻辑
finished 信号:线程执行完毕发出
terminate() 强制终止线程(不推荐,资源不会释放)
QTimer定时器 start(ms) 开启定时器,毫秒为单位,周期性触发timeout信号
stop() 停止定时器
timeout 信号,定时时间到触发回调
QObject deleteLater() 安全延时释放对象内存
Qt(枚举常量) Qt.AlignCenter 居中对齐,给QLabel、布局使用
Qt.KeepAspectRatio 图片保持等比缩放
QRect x(),y(),width(),height() 矩形,保存坐标尺寸
QPoint x(),y() 点坐标
QSize width(),height() 尺寸

重点:子线程中绝对不能直接操作任何QtWidgets控件 ,只能用pyqtSignal.emit()把数据发送到主线程更新UI。


三、PyQt5.QtGui 绘图、图像、字体工具模块

不提供现成窗口控件;提供绘图、图片、颜色、字体工具;供控件调用,也可自定义绘图

常用类 常用成员/函数 说明
QPixmap load("图片路径") 从磁盘加载图片,适合交给QLabel显示
scaled(w,h,Qt.KeepAspectRatio) 缩放图片,返回新QPixmap对象
QImage width()、height() 获取图像宽高;OpenCV Mat和QImage互转主要用它
bits() 获取图像原始内存数据指针
QPainter画笔 begin(obj) 开始在目标控件上绘图
drawText(x,y,"文字") 在指定坐标绘制文字
drawRect(x,y,w,h) 画矩形框(画YOLO检测框高频)
drawImage(x,y,qimage) 绘制QImage图像
end() 结束绘图;一般放在paintEvent自动管理不用手动调用
QColor setRgb(r,g,b,a) 设置颜色,RGBA0‑255
QFont字体 QFont("字体名",字号) 构造字体对象,传给QLabel使用

使用场景:

  1. OpenCV → QImage → QPixmap → QLabel显示图像(视觉上位机)
  2. 重写paintEvent,使用QPainter画框、标注文字

快速记忆小结

  1. 想要按钮、窗口、标签、弹窗 → QtWidgets
  2. 想要线程、定时器、自定义信号 → QtCore
  3. 想要处理图片、画笔绘图、颜色字体对象 → QtGui

极简导入模板(复制直接用)

python 复制代码
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel,
                               QVBoxLayout, QMessageBox, QFileDialog)
from PyQt5.QtCore import QThread, pyqtSignal, QTimer, Qt
from PyQt5.QtGui import QPixmap, QImage, QPainter, QColor, QFont
相关推荐
QYRdata1 小时前
Oracle云应用咨询服务驶入增长快车道:2026-2032年复合增长率达8.5%
数据库·oracle
AI办公探索者1 小时前
多租户架构下数据隔离的三种实现方案对比
数据库·ai·oracle·架构
2601_963282771 小时前
寒地专网通信实战:对讲机技术选型、组网优化与东北多行业落地全指南
大数据·数据库·人工智能
霖霖总总1 小时前
[MongoDB小技巧29]MongoDB PITR 深度工程化:从全量备份到“任意时间点”精准回滚
数据库·mongodb
JckOLF04Z2 小时前
自动开机调用迅雷下载数据库备份,完成后自动关机
数据库·单片机·嵌入式硬件
霖霖总总2 小时前
[MongoDB小技巧30]MongoDB 数据生命周期管理完全指南:从 TTL 索引到冷热分离归档
数据库·mongodb
生戎马 平安京策2 小时前
SQL Transcation的一些总结
数据库·sql·oracle
吃饱了得干活2 小时前
向量数据库 Milvus:从零搭建 RAG 向量数据库实战
数据库·langchain·agent
jjjava2.02 小时前
MyBatis动态if/trim/where/set标签详解
java·开发语言·数据库