PyQt5 四大实战案例详解:从基础窗口到智能应用
2026/4/17 15:52:19 网站建设 项目流程

目录

一、PyQt5 基础窗口程序

二、机器学习集成:农产品价格预测系统

三、实时视频处理:

四、逻辑交互工具:PyQt5 计算器

五、四大程序核心总结

六、总结


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 应用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询