目录
PyQt5 作为 Python 主流的 GUI 开发框架,搭配 Qt Designer 可快速实现可视化界面开发。本文将通过基础窗口、农产品价格预测、实时摄像头显示、计算器四大实战案例,带你快速掌握 PyQt5 界面开发与功能实现,覆盖基础语法、机器学习集成、多媒体处理、逻辑交互全场景。
一、PyQt5 基础窗口程序
代码作用
这是 PyQt5 入门级程序,用于学习 PyQt5 程序的标准结构,实现一个最简单的桌面窗口,包含窗口大小、位置、标题设置,是所有复杂界面的基础。
核心功能
1. 创建应用程序实例与基础窗口
2. 自定义窗口尺寸、显示位置、标题
3. 启动程序主循环,保持窗口正常运行
适用场景
学习 PyQt5 基础语法、理解窗口生命周期、搭建最简 GUI 程序。
前端页面设计:

Label(文本标签)显示文字提示、标题、图片,不支持交互,用于界面说明与展示。

Line Edit(单行输入框)接收用户单行输入,如账号、密码、数字、价格等。

Push Button(按钮)用于触发点击事件,如登录、计算、开关、提交等,是 GUI 交互核心。

Text Edit(多行文本框)用于输入 / 显示大段文字、日志、内容编辑,支持换行和滚动。
代码实现:
from PyQt5 import QtCore, QtGui, QtWidgets # 导入PyQt5的主要模块
from PyQt5.QtCore import * # 导入QtCore模块的所有内容,用于核心功能
from PyQt5.QtGui import * # 导入QtGui模块的所有内容,用于图形功能
from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox # 导入QtWidgets模块中的一些特定类
'''QFileDialog可以帮助用户选择文件路径
QMainWindow则是创建具有菜单、工具栏和状态栏的主窗口的起点。
QMessageBox可以用于向用户显示提示或警告信息'''
from win0 import Ui_MainWindow # 导入UI类,这个类包含了你的主窗口设计
import sys # 导入系统模块,用于访问命令行参数和系统相关功能
class PyQtMainEntry(QMainWindow, Ui_MainWindow): # 定义一个继承自QMainWindow和Ui_MainWindow的类
def __init__(self): # 构造函数
super().__init__() # 调用基类的构造函数进行初始化
self.setupUi(self) # 调用setupUi方法,根据Ui_MainWindow设计设置界面
# 参数初始化
# '''定义要触发的函数'''
# def predict_price(self):
# def showbiao(self):
# def slot1(self):
# print('金色传说')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) # 创建应用程序实例
window = PyQtMainEntry() # 创建主窗口实例
window.show() # 显示主窗口
sys.exit(app.exec_()) # 进入事件循环,并确保在退出时清理
运行结果:
按钮功能:点击打印 “金色传说”
# 按钮点击触发的函数
def slot1(self):
print('金色传说')
按钮绑定
self.pushButton_2.clicked.connect(self.slot1)
核心语法
按钮对象.clicked.connect(函数名)
当按钮被点击 → 执行 slot1 函数
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QMessageBox
from win0 import Ui_MainWindow
import sys
class PyQtMainEntry(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# ———————— 按钮绑定 ————————
# pushButton_2 点击 → 执行 slot1
self.pushButton_2.clicked.connect(self.slot1)
# ———————— 按钮点击功能 ————————
def slot1(self):
print("金色传说")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())

保存,再将win0.ui通过Pyuic变成win.py文件
然后运行上面的python代码,点击按钮 → 控制台输出 “金色传说”

二、机器学习集成:农产品价格预测系统
将训练好的机器学习模型与 PyQt5 界面结合,实现可视化预测工具,无需编写复杂命令行,普通用户可直接输入数据获取预测结果。
核心功能
1. 加载本地决策树模型(tree_model.pkl)
2. 输入玉米、大豆价格,一键完成价格预测
3. 一键清空所有输入输出框
4. 展示数据分析图表(Figure_1.png)
5. 输入异常值时自动弹出错误提示
适用场景
机器学习模型落地、数据预测工具、农产品价格分析、轻量化智能客户端。
1.先进行模型训练保存到本地
均价数据:

模型训练
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import joblib
import pandas as pd
from sklearn.model_selection import train_test_split
def train_tree():
data = pd.read_excel('均价数据.xlsx')
x = data.iloc[:, 1:-1]
y = data.iloc[:, -1]
# 数据切分
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
# 创建决策树分类器对象
tree = DecisionTreeRegressor()
tree.fit(x_train, y_train)
# 保存模型
joblib.dump(tree, 'tree_model.pkl')
if __name__ == '__main__':
train_tree()
# loaded_model = joblib.load('tree_model.pkl')
# print(loaded_model.predict(np.array([[2819,3601]])))
2.前端页面设计:
3.用pycharm实现:
1. 导入需要的库
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QMessageBox
import numpy as np
import joblib
import sys
from untitled import Ui_MainWindow
from PyQt5.QtGui import QPixmap
PyQt5:制作桌面窗口、按钮、输入框numpy:处理数据,给模型输入joblib:加载训练好的机器学习模型QPixmap:显示图片QMessageBox:弹出错误提示框untitled:Qt Designer 设计好的界面文件
2. 主窗口类
class PyQtMainEntry(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
创建主窗口
加载界面(按钮、输入框、标签)
setupUi(self) 是把界面显示出来
3. 加载机器学习模型
self.model = joblib.load('tree_model.pkl')
程序启动时,加载提前训练好的 决策树模型。
4. 按钮绑定功能
self.pushButton.clicked.connect(self.predict_price) # 预测
self.pushButton_2.clicked.connect(self.clear_all) # 清空
self.pushButton_3.clicked.connect(self.showbiao) # 显示图片
PyQt5 的信号与槽:
按钮 1 → 预测
按钮 2 → 清空
按钮 3 → 显示图片
5. 价格预测功能
def predict_price(self):
try:
corn_price = int(self.lineEdit.text())
soybean_price = int(self.lineEdit_2.text())
predicted_price = self.model.predict(np.array([[corn_price,soybean_price]]))
self.lineEdit_3.setText(str(predicted_price[0]))
except ValueError:
QMessageBox.warning(self,'错误','请输入有效的价格')
1. 获取两个输入框的价格
2. 传给机器学习模型
3. 模型预测结果
4. 显示到第三个输入框
5. 如果输入不是数字 → 弹出错误提示
6. 一键清空功能
def clear_all(self):
self.lineEdit.clear()
self.lineEdit_2.clear()
self.lineEdit_3.clear()
清空所有输入框,方便重新输入
7. 显示图片功能
def showbiao(self):
try:
pixmap = QPixmap("Figure_1.png")
self.label_4.setPixmap(pixmap)
except Exception as e:
print("Error loading image:",e)
加载 Figure_1.png 图片,显示在界面的标签上。
8. 程序启动入口
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
创建应用
显示窗口
启动程序循环
保持窗口不关闭
预测结果:
打开对照表将图片显示出来:

三、实时视频处理:
摄像头画面显示系统 代码作用 结合 OpenCV 与 PyQt5,调用电脑摄像头实现实时视频采集与界面显示,是图像处理、视觉监控的基础程序。 核心功能 调用系统默认摄像头,实时采集视频流 定时器定时刷新画面,保证视频流畅显示 按钮控制摄像头开启 / 关闭 自动适配界面尺寸,优化画面显示效果 窗口关闭时自动释放摄像头资源 适用场景 视频监控、人脸识别界面、图像处理工具、直播画面预览、视觉项目开发。
import sys
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(740, 600) # 窗口大小适配640x480画面+按钮
# 中心部件(PyQt5主窗口必须有centralwidget)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# 1. 摄像头画面显示Label
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(50, 30, 640, 480)) # 位置+大小
self.label.setObjectName("label")
self.label.setText("") # 初始无文字
self.label.setScaledContents(True) # 自适应Label大小
# 2. 摄像头开关按钮
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(320, 530, 100, 40)) # 位置+大小
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("打开") # 初始文字
# 绑定中心部件
MainWindow.setCentralWidget(self.centralwidget)
# 界面文字翻译(标准结构)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
class PyQtMainEntry(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# 初始化摄像头
self.camera1 = cv2.VideoCapture(0)
self.is_camera_opened = False # 摄像头是否开启的标志
# 定时器:30ms获取一帧
self._timer = QtCore.QTimer(self)
self._timer.timeout.connect(self._queryFrame)
self._timer.setInterval(30)
# 补充:绑定按钮点击事件到槽函数(原代码缺失,必须加)
self.pushButton.clicked.connect(self.slot1)
def slot1(self):
# 槽函数,用于响应按钮点击事件
self.is_camera_opened = not self.is_camera_opened
if self.is_camera_opened:
self.pushButton.setText("关闭")
self._timer.start()
else:
self.pushButton.setText("打开")
self._timer.stop()
def _queryFrame(self):
# 私有方法,用于从摄像头获取并处理新帧
ret1, self.frame1 = self.camera1.read()
if not ret1: # 补充:读取失败直接返回,避免程序崩溃
return
self.frame11 = cv2.resize(self.frame1, dsize=(640, 480))
if ret1:
qimage = cv2.cvtColor(self.frame11, cv2.COLOR_BGR2RGB)
qimage = QtGui.QImage(qimage.data, qimage.shape[1], qimage.shape[0],
QtGui.QImage.Format_RGB888)
pixmap = QtGui.QPixmap.fromImage(qimage)
self.label.setPixmap(pixmap)
# 补充:窗口关闭事件,释放摄像头资源(避免程序退出后摄像头被占用)
def closeEvent(self, event):
if self.camera1.isOpened():
self.camera1.release()
self._timer.stop()
event.accept()
# -------------------------- 主函数入口(原代码缺失,必须加) --------------------------
if __name__ == "__main__":
app = QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
运行结果展示:

四、逻辑交互工具:PyQt5 计算器
基于 PyQt5 实现标准计算器功能,通过按钮点击完成四则运算,包含输入校验、异常处理、结果实时显示,是学习界面交互与逻辑判断的经典案例。
前端设计:

代码实现:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QMessageBox
import sys
# 导入Qt Designer生成的界面类
from 计算机 import Ui_MainWindow
class PyQtMainEntry(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("PyQt5计算器")
# 存储当前输入的表达式
self.expression = ""
# -------------------------- 绑定所有按钮的点击事件 --------------------------
# 数字按钮 0-9
self.pushButton_0.clicked.connect(lambda: self.append_num("0"))
self.pushButton_1.clicked.connect(lambda: self.append_num("1"))
self.pushButton_2.clicked.connect(lambda: self.append_num("2"))
self.pushButton_3.clicked.connect(lambda: self.append_num("3"))
self.pushButton_4.clicked.connect(lambda: self.append_num("4"))
self.pushButton_5.clicked.connect(lambda: self.append_num("5"))
self.pushButton_6.clicked.connect(lambda: self.append_num("6"))
self.pushButton_7.clicked.connect(lambda: self.append_num("7"))
self.pushButton_8.clicked.connect(lambda: self.append_num("8"))
self.pushButton_9.clicked.connect(lambda: self.append_num("9"))
# 运算符按钮
self.pushButton_add.clicked.connect(lambda: self.append_op("+"))
self.pushButton_sub.clicked.connect(lambda: self.append_op("-"))
self.pushButton_mul.clicked.connect(lambda: self.append_op("*"))
self.pushButton_div.clicked.connect(lambda: self.append_op("/"))
# 功能按钮
self.pushButton_eq.clicked.connect(self.calculate_result) # = 按钮
self.pushButton_clear.clicked.connect(self.clear_expression) # clear 按钮
# -------------------------- 数字输入:追加数字到表达式 --------------------------
def append_num(self, num):
self.expression += num
self.pushButton_com.setText(self.expression) # 实时显示在label上
# -------------------------- 运算符输入:追加运算符 --------------------------
def append_op(self, op):
# 避免连续输入运算符(比如 1++2)
if self.expression and self.expression[-1] not in "+-*/":
self.expression += op
self.pushButton_com.setText(self.expression)
# -------------------------- 计算结果:执行表达式 --------------------------
def calculate_result(self):
try:
# 用eval执行表达式,得到结果
result = eval(self.expression)
# 显示结果,同时更新表达式为结果(支持连续计算)
self.expression = str(result)
self.pushButton_com.setText(self.expression)
except ZeroDivisionError:
# 除零错误
QMessageBox.warning(self, "错误", "除数不能为0!")
self.clear_expression()
except SyntaxError:
# 语法错误(比如 1+2* 不完整)
QMessageBox.warning(self, "错误", "输入的表达式不合法!")
self.clear_expression()
except Exception as e:
# 其他未知错误
QMessageBox.warning(self, "错误", f"计算出错:{str(e)}")
self.clear_expression()
# -------------------------- 清空表达式:重置所有输入 --------------------------
def clear_expression(self):
self.expression = ""
self.pushButton_com.setText("")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
运行结果展示:


核心功能
1. 数字 0-9、加减乘除输入
2. 等号一键计算表达式结果
3. 清空按钮重置所有输入
4. 避免连续输入运算符,提升使用体验
5. 捕获除零、语法错误,防止程序崩溃
五、四大程序核心总结
| 程序类型 | 核心技术 | 主要作用 |
|---|---|---|
| 基础窗口 | QApplication + QWidget | 学习 PyQt5 基础结构 |
| 价格预测 | PyQt5 + 机器学习模型 | 智能模型可视化落地 |
| 摄像头显示 | PyQt5 + OpenCV | 实时视频采集与界面显示 |
| 计算器 | 信号与槽 + 表达式计算 | 界面交互与逻辑判断 |
六、总结
以上四段代码覆盖了 PyQt5 从入门到实战的全流程: 基础窗口掌握程序结构 机器学习集成实现智能应用 OpenCV 结合实现多媒体处理 计算器完成交互逻辑开发 通过这四个案例,可快速掌握 PyQt5 界面开发、工具配置、功能扩展的核心能力,轻松开发各类桌面端 GUI 应用。

5359

被折叠的 条评论
为什么被折叠?



