Python详细介绍模型封装部署流程
作者:IntelligentRS 发布时间:2023-03-27 00:49:32
一、桌面应用软件
桌面应用软件是基于GUI(Graphical User Interface,图形用户界面)交互式程序,需要实现GUI库实现前端交互。
Python常见的GUI库
TKinter:基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少;
wxPython:基于wxWidgets的Python库,优点是控件比较丰富、缺点是稳定性相对差点、文档少、用户少;
pyQT5,Pyside2:基于Qt的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多、缺点是库比较大,发布出来的程序比较大;
Qt Designer:Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架;
PyQT5:"Riverbank Computing"公司早期的python GUI开发工具库,是QT与Python的结合,但并非Qt公司出品,属于“义子”;
Pyside2:2018年7月,Qt公推出的工具库,它提供了对Qt5.12+完整框架的访问,简单点来说就是在Python下使用Qt,即Qt的“亲儿子”;使用上PyQt5与PySide2差别很小,接口调用几乎一模一样。
程序打包工具:Pyinstaller
下图为Python桌面应用软件开发大体的技术架构。
图1 软件技术架构
二、Pyside2&Qt designer
(1)PySide2——控件
图形界面的工具基础:控件(widget)、信号(signal)与槽(solt),控件表示前端界面可显示/操作/交互的元素,如按钮、输入控件、展示控件等,供用户点击、接受用户输入、展示内容、存放其它控件。
PySide2的安装:
pip install PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
下面为一个PySide2程序的实现流程:
1.定义一个应用
2.定义主窗口
3.定义需要的控件
4.执行应用,进入事件循环
# -*- coding: utf-8 -*-
"""
# @file name : 01_helloworld.py
# @brief : 使用pyside编写第一个软件
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QTextBrowser, QLabel
if __name__ == "__main__":
app = QApplication([]) # UI应用程序管理应用
# ================================================
# 1. 定义主窗口
window = QMainWindow()
# 2. 定义文本框显示
label = QLabel(window)
label.setText("Hello World!")
# 3. 窗口显示
window.show()
# ================================================
app.exec_() # 进入QApplication的事件处理循环
图2 PySide2实现第一个GUI界面
(2)PySide2——信号(signal)与槽(slot)
用户对图形界面的控件操作就会产生信号,程序应能接收识别信号,并进行相应的处理。特点信号的处理函数称为槽。
按钮被点击时,向程序发出信号,程序自动执行btn_slot函数。
# -*- coding: utf-8 -*-
"""
# @file name : 02_signal&slot.py
# @brief : 了解信号与槽
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
if __name__ == "__main__":
app = QApplication([]) # UI应用程序管理应用
# ================================================
# first. 定义主窗口
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
# 2. 定义按钮控件
def btn_slot():
print("用户点击了按钮,将执行xxx")
btn = QPushButton("我的按钮", window)
btn.clicked.connect(btn_slot)
# 3. 单行文本框
def text_slot():
text = text_edit.text()
print("检测到文本框变动,当前文本框信息为:{}".format(text))
text_edit = QLineEdit(window)
text_edit.move(100, 0)
text_edit.setPlaceholderText('请输入信息...')
text_edit.textChanged.connect(text_slot)
# 窗口显示
window.show()
# ================================================
app.exec_() # 进入QApplication的事件处理循环
图3PySide2实现第二个GUI界面
(3)常用控件
1.按钮:btn = QPushButton(“我的按钮”,window)
2.单行文本框:text_edit = LineEdit(window)
3.标签显示:label = QLabel(window)
4.文件选择:path_file,filetype = QFileDialog.getOpenFileName(window,"选取文件","./","All File(*);;Text Files(*.jpg)")
(4)Qt Designer
Qt Designer可以通过拖曳的方式完成复杂的界面设计,完成控件设计。Qt Designer生成的UI界面是一个后缀为.ui的文件,其实是一个XML文件。通过使用pyuic5命令将.ui文件转换成.py文件,然后将.py文件引入到自定义的Python代码中。主要分为以下四步:
安装:随着pyside2安装时,自动安装
启动:Python安装目录下Scripts\pyside2-designer.exe
转换:pyside2-uic xxx.ui > xxx.py
使用:在QMainWindow中初始化xxx.py中的控件,然后定义槽函数
图4 Qt Designer设计流程
三、模型封装部署
封装--面向对象三大特性之一,面向对象(Object Oriented Programming)的三大特性如下:
封装(Encapsulation):隐藏对象的属性和实现细节,仅对外提供公共访问方式;
继承(Inheritance):使用已存在的类定义作为基础建立新类的方法;
多态(Polymorphism):“多种状态”,接口的多种不同的实现方式即为多态;
类的设计三要素:
类名:这类事物的名字;
属性:这类事物具有什么样的特征;
方法:这类事物具有什么样的行为;
图5封装模型的过程
类名:Predictor;
属性:model,path_ckpt,device,transform;
方法:preprocess,inference,get_model,get_transform;
四、Pyinstaller
Pyinstaller是一个用来将Python程序打包成一个独立可执行软件包,支持Windows、Linux和Mac OS,Pyinstaller可以读取您编写的Python脚本。
Pyinstaller分析代码执行所需的所有模块,然后将这些文件的副本和Python解释器一起放在单个文件夹中,或者在单个可执行文件中。
Pyinstaller的安装:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
软件打包执行命令:pyinstaller xxx.py,完成后到root/dist/xxx下,找到xxx.exe
pyinstaller main.py --noconsole -F -p D:\course_study\CV_Item\self\img_cls
更新spec文件命令:
pyinstaller -F --onefile main.spec
常用参数:
-F,-onefile产生单个的可执行文件
-p,设置python导入模块的路径(和设置pythonpath环境变量的作用相似)
--noconsole软件启动时不显示命令窗
五、总结
来源:https://blog.csdn.net/qq_36171491/article/details/126059040


猜你喜欢
- 进程的概念程序是没有运行的代码,静态的;进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称;程序只有一个,但同一份程序可以有多个进
- 背景:Email地址存于MSSql一用户信息表中,数量上万。公司自有服务器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多种服
- 用FrontPage做网页的朋友们,你的主要页面中,可能都带有许多相同的元素吧?如页头横向排列(或左侧纵向排列)的主要链接按钮、页底的板权说
- 测试系统环境 Windows 2003 python 2.5.1
- 邮件自动化篇章所需的新模块:smtplib 邮件协议与发送模块email 内容定义模块schedule 定时模块smtplib 与 emai
- 插入数据MySQL 表中使用 INSERT INTO SQL语句来插入数据。你可以通过 mysql> 命令提示窗口中向数据表中插入数据
- 设置MySQL数据同步(单向&双向)由于公司的业务需求,需要网通和电信的数据同步,就做了个MySQL的双向同步,记下过程,以后用得到
- 在python中enumerate的用法多用于在for循环中得到计数,本文即以实例形式向大家展现python中enumerate的用法。具体
- 1、requests 的常见用法requests 除了 url 之外,还有 params, data 和 files 三个参数,用于和服务器
- 在接口测试学习过程中,遇到了利用requests库进行文件下载和上传的问题。同样,在真正的测试过程中,我们不可避免的会遇到上传和下载的测试。
- 摘要:大家提到Mysql的性能优化都是注重于优化sql以及索引来提升查询性能,大多数产品或者网站面临的更多的高并发数据读取问题。然而在大量写
- MySQL存储过程与存储函数的相关概念存储函数和存储过程的主要区别:存储函数一定会有返回值的存储过程不一定有返回值存储过程和函数能后将复杂的
- 1 简介事务的4种隔离级别分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、 可重复读(Repe
- 微信小程序 scroll-view实现上拉加载与下拉刷新的实例实现效果图:如图,使用小程序的scroll-view实现的上拉加载数据,下拉刷
- 先上两段代码<script>var i = 2;function test(){var i = 1;}test();alert(
- 这里想象一下需求,写一个项目使用的一系列1.0版本的插件,现在要新写一个项目,需要用这些插件的2.0版本,该怎么办?都更新成2.0版本?这样
- 来自Six Revisions的一篇文章,作者对一些主流的浏览器进行了测试比较,测试主要针对以下几个方面进行:1.JavaScript执行速
- 现在的互联网上已经有很多能帮助设计师们的各种在线生成器,比如:图标(icon)生成器、背景生成器、按钮生成器和标志生成器等。Balkhis曾
- 高斯模糊的介绍与原理通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。"模糊"
- 字符串函数ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) my