一、功能

从软件界面上打开一个txt文件,后台提取内容,显示在界面上。通过这个Demo软件,可以练习软件开发的基本流程。不进行异常的设计,仅设计按照正常流程走的程序。

二、环境

OS:win10
UML: starUML
Language: python 3.7.4 (use venv)
Graphics Lab: pyqt5
shell: windows terminal
editor: VS Code
注:这并不是一个基础的语法、规则等教程,需要具备一定的 python, uml, qt, git, vs code, shell 基础。

三、内容

使用UML设计软件架构,不同的层之间通过标准化的接口调用,不同的程序员开发不同的层。
模拟多开发者协作,使用git进行多分支的开发。
软件的打包,分布到PyPI,生成exe包供终端用户使用。
四、代码仓库

Talk is cheap, show my code here:

AndyYang/testDemo

gitee.com
图标
由于github在国内不稳定,所以使用gitee进行控制。

五、程序开发流程

六、软件UML架构

1、用例图

2、类图

3、流程图


4、时序图

starUML暂时还没搞定这个图功能,先空着。

七、编码

1、分析

由六中的UML中的类图可看出,整个软件可化为三层:最左边的TestDemo主要完成功能是实例化一个app,因为后期软件还要进行打包、发布,所以可以将这部件看作一个层,命名为:实例层;中间的Ui_MainWindow和MainWindow可看作一层,主要完成界面的设计。界面的设计又可进一步细分为界面设计(美工的范围)和界面背后的逻辑设计,命名为界面控制层;最后面的Process主要完成对数据的处理,命名为数据处理层。层层之间通过标准的接口实现,下层为上层提供相应的类,函数和返回值。

2、人员化分

依据上面的分析,模拟出三个开发人员,其职责如下:

Dev:管理员,控制各开发人员工作之间的协作及代码merge。
Dev1: 完成实例层设计,主要是利用下层提供的类及相关信息,实例化一个类,最后使用setuptools完成程序的打包、发布等功能。
Dev2: 完成界面控制层的设计,其实还可以进一步细分为两个开发者,考虑到Demo程序简化操作,使用一个开发者完成本层。
Dev3: 完成数据处理层的设计,为上层提供相关类及返回值。
3、版本控制

控制工具使用git,远程服务器使用gitee,主要为了练习多分支的开发,建立多分支结构如下:

master:主要完成release版本的释放,稳定分支。
Dev: 主要的开发分支,用于各开发人员的分支与本分支的merge,不稳定的分支。当到某个时间节点需要release时,检查无错误后向master分支push。
Dev1: Dev1平常工作使用的分支。
Dev2: Dev2平常工作使用的分支。
Dev3: Dev3平常工作使用的分支。
在gitee上建立远程仓库,建立README.md及相关文件,提供仓库地址给开发者。

Git的基本知识,远程仓库的操作等自行搜索解决。

4、开发者起始通用流程

在本地某个文件夹中clone远程仓库并进入(注意:一定要进入clone下来的文件夹)。这时,使用 git branch -a 可以看到此时的所有分支。如果在其它已经存在多分支的项目中,想克隆其它分支,可参考引用1的内容。

5、开发者的python环境搭建流程

为什么要使用python虚拟环境?详细解释见引用3。使用python虚拟环境的前提是已经安装好了python。本文使用python 3.7.4版本,3.7.3版本的虚拟环境创建时会出现一个bug。具体创建使用方法,见引用3.

6、项目开发结构设计

这是一个非常重要的话题,因为最终开发的软件要分发给终端用户使用。为了未来软件打包及避免git merge失败,所以必须先进行每个开发者文件夹的分配。从顶层对文件的代码进行控制,建立开发文件夹结构如下所示:

注:开发者个人文件夹dev, dev1, dev2, dev3 应使用一个跟自身编码内容相关的名字取代,例如使用 gui 代替 dev2。

部分文件作用声明:

setup.py: 打包所需要的配置文件,必须存在。
setup.cfg: A setup.py file containing a setup() function call is still required even if your configuration resides in setup.cfg。Setuptools allows configuration files(usually setup.cfg) to define a package’s metadata and other options that are normally supplied to the setup() function. only metadata-relate keys from metadata section ae supported(except for description-file); keys from files, entry_points and backwards_compatare not supported. setup.cfg仅支持与metadata相关的keys.个人理解是setup.cfg也定义了包的一些配置文件,不能取代setup.py。经过搜索有的观点认为 setup.cfg 提供 Python 分发的所有元数据并生成配置。但是见过有的项目中 setup.cfg 的内容与官方文档上面的完全不同。本项目暂时不使用此文件。
MANIFEST.in: 当在setup.py中设置key:include_package_data为true时,accept all data files and directories matched by http://MAINIFEST.in。个人理解是此文件中定义了一些包需要的数据文件的正则表达式,当相应key设置是真是,包括进去。
pylint.cfg: pylint是最常用的python代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准和有潜在问题的代码。
venv:python虚拟环境文件夹,不纳入git控制范围
7、Dev流程

实施开发者起始通用流程。
建立本地Dev分支。git checkout -b Dev 可以创建Dev分支,并切换到Dev分支。
根据项目开发结构,建立dev文件夹并进入,创建自己的文件。这里建立一个dev.txt来测试一下。
git add -A & git commite -m “xxx”。添加文件到本地仓库并提交。
推送远程仓库。git push origin Dev. 详细解释见引用2,不要加option: -u。
检验。这时在远程仓库中切换不同的分支观察,不同的分支里包含的内容不同。
git branch -a 可以看到所有的分支及追踪情况。
python 虚拟环境的创建。 cd ./Dev/testDemo/ ; python3 -m venv venv/ ; venv/ 可任意取名。cd ./venv/Scripts/ ; 使用 VS Code不用激活环境( ./activate),其会自动识别出虚拟环境,如果不成功,自行搜索解决。
使用 VS Code 打开 testDome 项目,在git控制中发现并没有增加新文件,这是因为在使用 gitee 创建远程仓库时,我个人增加了一些初始化文件,如 .gitigrore, README.md, LICENSE 等文件。其中 .gitignore 里面的内容指定了 git 不进行版本控制的文件,自动包含了 .env venv/ 等内容。如果在创建远程仓库时并没有这么做,那么这个文件需要自己写。建议使用自动化的 .gitigore 文件,因为自己写的话,后续还有python运行时的字节码文件也需要自己写,浪费时间。
8、Dev{1、2、3}流程

同Dev流程类似,创建自己的分支和工作文件夹,这样可以避免工作的交叉及未来 Merge 时可能产生的潜在冲突。注意,克隆的分支应该是Dev分支(此时Dev分支已经将项目结构文件设定好了),参考引用1.

9、程序中使用的部分模块功能解释

sys.excepthook: 进行全局异常的获取,详细见引用6
10、Dev1,2,3工作

Dev1,2,3开发者使用指令:git pull origin DevX; X=1,2,3依次进行,完成之后分别 git push origin DevX; X=1,2,3。 通知Dev工作完成

11、Dev工作

当Dev1,2,3,开发人员工作完成后,Dev将Dev1,2,3的分支分别与Dev分支合并,解决冲突。
对整体代码进行测试。当代码出现问题时,将问题反馈给Dev1,2,3进行迭代修改。
代码正确无误后,提交Dev分支,通知master,进行版本的release
12、软件释放

项目经理将master与Dev分支进行合并,代码版本释放结束。

八、总结

1、利用 pyreverse & Graphviz % pygraphviz 可以生成软件包的相关依赖关系和类UML图,使用起来非常方便。使用Graphviz和Pyreverse绘制Python项目结构图。

2、利用 pyuic5 -o x.py x.ui 生成的x.py程序中,若引用了外部的resource_rc.py时,自动生成的代码会有一行: import resource_rc 。在实际使用中会发生错误,需要修改为 from . import resource_rc。

3、如果开发的程序比较大,一定要按照流程走。如果不先将软件的整体架构给设计清楚,不然会发现写着写已经不知道程序是如何来回跳跃了。后续在code的过程中一定会对最原始的架构进行一定的调整,软件的层数一般改动比较小,改动最大的应该就是层与层之间的接口了。接口应该是最重要的设计部分。

4、测试成功界面

九、引用

https://blog.csdn.net/autocyz/article/details/52318497 如何克隆远程仓库中的不同分支。我猜测 git clone 实质上把远程所有分支的代码都clone下来,默认显示的 master 分支里面的内容,此时本地创建新分支并联到远程已有分支时,就可以把远程其它分支里面的代码给显示出来。
https://stackoverflow.com/questions/1519006/how-do-you-create-a-remote-git-branch 推送创建远程分支。
代码详解:Python虚拟环境的原理及使用 - 51CTO.COM
https://packaging.python.org/tutorials/packaging-projects/ 如何对自己的项目打包
https://blog.csdn.net/eliz_jack/article/details/51812492 安装包命名冲突问题
python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中 - |残阳|露 - 博客园
Packaging Python Projects python文件打包方法
人类身份验证 - SegmentFault上传包到PyPi方法
https://blog.csdn.net/chouzhou9701/article/details/86662689 python关于error: invalid command 'bdist_wheel报错的解决

基于pyqt5的Demo软件开发相关推荐

  1. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

  2. 基于组件的.NET软件开发(1)

    基于组件的.NET软件开发 前言 随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式.以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导 ...

  3. 基于Andro平台的软件开发若干关键技术研究(笔记)

    基于Android平台的软件开发若干个关键技术研究 摘要:随着移动智能终端的飞速发展和广泛普及,移动GIS应用正迅速迅速成长,并且成为最有发展前景的热点之一.作为移动GIS应用的分支,基于Androi ...

  4. 基于Qt的待办软件开发

    大一的时候,由于各种作业.事情太多,笔者迫切希望找一个好用的待办软件,但是一直没有找到合适的.于是一冲动,索性决定自己给自己写一个. 之后这一年多,笔者不想玩游戏了就会写一写这个项目,如今算是达成了阶 ...

  5. 基于QT框架的软件开发

    QT入门科普 初识QT 更新到QT6: QT的许可类型 QT与C++ QT美与丑 技术选型偏重 未来发展趋势 个人发展路线 初识QT Qt 是一个1991年由Qt Company开发的跨平台C++图形 ...

  6. 基于QML的 客户端软件开发流程

    一,背景 Qt Quick 作为Qt公司对移动端的一种尝试,无疑是失败的.生态的缺失,支持的不利,基本上看不到移动端有人用这套东西来开发应用,但是这套技术本身是不错的,快速的开发效率,gpu式的渲染方 ...

  7. 基于组件的.NET软件开发(3)

    动态组件插拔 在实现动态组件插拔之前,我们必须了解一个概念:反射(Reflection). 所谓反射,就是仅依据名字来创建一个对象. 举个例子,在上面的例子中,我可以直接给定一个字串:" C ...

  8. 基于Android平台im软件开发,基于Android平台IM软件多媒体数据传输保护

    Protection for Instant Messanger Media data Transmission Based-on Android WU Weina 1 吴维娜(1992- ),女,北 ...

  9. 基于AUTOSAR规范的电机控制器软件开发

    基于AUTOSAR规范的电机控制器软件开发 本系列文章主要介绍如何开发符合AUTOSAR规范的电机控制器软件的详细过程. 全系类分为基础篇和实战篇:基础篇内简要介绍最新的AUTOSAR规范,嵌入式软件 ...

  10. 【软件开发合集】各种类型软件开发合集(包括JS,Python和Android)

    [软件开发合集]各种类型软件开发笔记合集,包括JS,Python和Android 1.[基于JS的软件开发笔记] 1.1 基于JavaScript开发的校园综合类微信小程序 2.[基于Python的软 ...

最新文章

  1. Jzoj4747 被粉碎的线段树
  2. C++/C++11中std::queue的使用
  3. 后赛门铁克时代Veritas加强数据保护应对欧盟法规
  4. 编程软件python t-Python 3.7 64位下载
  5. 码云一个仓库只有一个项目吗_gitee码云完整使用教程(部署与克隆)
  6. 微型计算机内存不能用指令修改的部分,在微型计算机内存储器中,不能用指令修改其存储内容的部分是什么?...
  7. java io nio aio_Java IO、NIO、AIO知识总结
  8. php json 循环输出html,我要用js从json文件中取值,并输出的html页面,有个问题
  9. 【2017年第1期】基于征信数据观中国近10年产业间信贷资源的调整路径
  10. 二级VB培训笔记07:通用对话框
  11. windows无法访问_注册CourseMaker之后无法登录,显示“网络无法访问……”,怎么办?...
  12. EditText焦点自动带出软键盘问题
  13. Linux ftp 上传文件 提示 Permission denied 解决办法
  14. Max 缩放代码 获取2点直接的距离
  15. php 读取本地excel文件,PHP读取Excel文件的简单示例
  16. dsp c语言流水灯程序,DSP流水灯源程序
  17. linux开启磁盘多队列(blk-mq)
  18. 服务器为什么要域名解析,DNS解析的过程是什么 为什么需要DNS解析域名为IP地址?...
  19. 罗技M590优联无法使用的问题解决
  20. insurgency服务器修改,insurgency指令大全 | 手游网游页游攻略大全

热门文章

  1. 新版贵金属喊单直播间 财经直播间系统 视频直播室在线喊单 源码
  2. ROST CM使用方法
  3. 乱码克星:VFP源文件简繁体内码转码器软件
  4. java算法是什么_什么是java算法
  5. Perl语言入门(第六版)pdf
  6. Perl语言入门(13 perl调试程序)
  7. Java基础教程2022
  8. 100部经典漫画,有机会看看。
  9. 史上最详细的宝塔部署java项目流程
  10. JAVA视频MP4文件加密,Html5播放器调用