PyQt5实战——多脚本集合包,UI以及工程布局(二)

个人博客:苏三有春的博客

系列往期:
PyQt5实战——多脚本集合包,前言与环境配置(一)

布局

2.1 UI页面布局

整体框架分为分为三个部分,垂直分布。

  • 第一个部分为功能选择按钮(如UTF-8转换,翻译器等)

  • 第二部分为功能区,即对应功能输入,输出展示区

  • 第三部分为后台区,显示对应的后台信息(本质上是将终端输出的print重定向至这块区域,方便调试以及使用)

除此之外,整体的下方状态信息栏中有版本信息

整体布局如下图所示:

请添加图片描述

tips:

这个界面是直接在vscode中运行时所展示的,因此图标以及部分按钮并未完全列装(不保证debug与打包一致的原因较为复杂,与pyinstaller的版本有关,后续内容会解释),图标列装后如下所示:

请添加图片描述

2.2 工程布局

在创作自己的程序前(如果是较大的程序),最好需要规划一下自己的工程结构,用多个不同的目录保存不同的资源,如图像,文本,代码等,而代码中,实现不同功能的subprograms(子程序)也可以再细分在不同的目录中,尤其是可以多个subprogram(子程序)反复调用的subprograms(子程序)或scripts(脚本)。

我的工程布局意识也是在这个项目中不断完善的,还有一些不足和错误的地方也在不断更新中。

一级目录

请添加图片描述

  • MyScriptTools目录是包目录,为了方便管理我们需要用到的各种包文件,需要在项目开始时便创建好该项目python运行的虚拟环境(虚拟环境具体的创建流程看前文)。创建完成后,使用pip包管理器下载的所有包都会保存在这个包目录中。(因为我的虚拟环境名字叫MyScriptTools,因此包目录的名字也叫MyScriptTools)
  • src是存放代码的位置,所有的代码都存放在这个目录下
  • workspaces目录是运行时创建的保存文件目录,因为我的项目中,有一些功能或脚本会产生新的文件,我希望它们被保存在一个统一的空间,看起来不会太过混乱,因此专门设计了这一个功能:在程序运行时,创建一个workspaces目录,以后若产生新的文件,统一保存在workspaces目录下
  • BingTranslator.py与test.py是两个测试脚本,目前已经失去了作用

src目录

请添加图片描述

  • Classes:该目录下存放着各种功能的功能区UI类,error类等,如TranslatorClass.py为翻译功能的UI设计,包括按钮,文本框的布局等
  • component:该目录下存放着修改组件样式的方法,如editStyle.py文件中存放着修改QLineEdit样式的方法以及修改QTextEdit样式的方法。这样如果有多个QLineEdit组件需要修改样式时,只需要调用其中的方法即可。
  • dist:该目录是使用pyinstaller将程序打包成exe可执行文件时生成的,exe可执行文件存放在其中
  • res:该目录下存放着需要使用的图片,图标等资源文件
  • tools:该目录下存放着脚本以及功能的实现,如:实现翻译的功能方法存放在tools目录下的translation.py文件中,Classes目录下的TranslatorClass.py文件中会调用translation.py文件来实现功能
  • xxx.spec:该文件是如果打包时使用了–onefile参数,即打包生成一个单独的exe文件,则会产生该文件,该文件记录了一些打包时需要关注的信息
  • icon.ico:图标文件,可要可不要,如果不要,在打包时想要生成exe文件的图标时需要指定图标的路径,我懒得指定路径,只想填个名字,就把图标放在与main.py同一目录下
  • main.py:该文件时程序的入口,与C程序的main相同。打包时需要指定程序入口,即该文件
  • PrimeWindow.py:主UI框架,即主窗口,上面Classes中的UI仅为功能区UI,属于主窗口的三部分之一

2.3 布局思想

我的布局思想是在不断碰壁的过程中自己摸索出来的,在开发这个程序之初并没有想把它做成一个完整的具有UI界面的功能集合包,因此一开始并没有工程布局的概念,需要做什么便在src下新建一个文件开始编码,这种习惯的弊端在随着程序愈发庞大而变得愈发清晰,使程序越来越难管理且开发难度增大。之后抽时间将程序整理了一遍,便形成了这种布局。个人观念,仅供参考。

我的工程布局思想主要遵循两个原则:

归类

相同属性或相同功能或本质相同的文件放在一个目录下,如:图片,文本等文件属于输入文件,只可被调用,因此放在同一目录res下,当然,res下可再做区分,img,icon,txt等。不同的功能区UI可放在同一目录下,这样可以将primeWindow与功能UI区分开来,且方便primeWindow调用功能UI,来实现功能的切换。功能的实现放在tools目录下,classes可以调用tools下相应的功能。tools目录下,部分功能过于复杂无法用一个文件完成也可以再建立子目录。

重复调用

如果遇到需要反复调用的功能,可集成出来单独形成一个方法单独存放,方便不同文件的调用,而不需要重复实现,如文本框,单行文本框,按钮等样式,实现选择文件等功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动开发(3):字符设备驱动

上一章节我们了解到什么是内核模块,模块的加载卸载详细过程以及内核模块的使用等内容。 本章,我们将学习驱动相关的概念,理解字符设备驱动程序的基本框架,并从源码上分析字符设备驱动实现和管理。 主要内容有如下五点:…

中国逐年最大NDVI数据集(250m)

最大NDVI数据集是指通过遥感技术获取的归一化植被指数(NDVI)数据,这些数据反映了地表植被覆盖的密集程度。NDVI的数值范围通常为-1到1,其中-1表示完全被水覆盖,0表示有岩石或裸土等非植被覆盖,而1表示植被完…

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 文章目录 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和…

Transformer 架构简单理解;GPT-3.5 的架构,向量长度为 :12288;Transformer架构改进:BERT和GPT

目录 Transformer 架构简单理解 GPT-3.5 的架构,向量长度为 :12288 Transformer工作原理:在多头注意力机制(Multi - Head Attention)的标准操作中,每个头(head)的输入数据是相同的 Transformer架构改进:BERT BERT:BERT是一种基于Transformer的预训练语言模型,它…

Springboot 内置缓存与整合Redis作为缓存

Spring Boot 的缓存注解允许开发者在不修改业务逻辑的情况下,将方法的计算结果缓存起来,从而减少重复计算和数据库查询,提高系统性能。 1、Spring Boot Cache 的基本用法及常用注解 1. 引入依赖 首先,需要在项目中引入缓存相关依…

《西部皮革》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《西部皮革》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《西部皮革》级别? 答:省级。主管单位:四川省经济和信息化厅 …

【4】函数与结构体

文章目录 一、函数的基本流程及调用二、包的使用原理三、函数的使用注意事项四、defer的使用五、字符串常用系统函数六、时间函数七、常用内置函数八、错误处理机制及自定义错误 一、函数的基本流程及调用 package mainimport ("fmt""strings" )// 定义简…

供应SW1108P集成氮化镓直驱的高频准谐振IC

1. 概述 SW1108P 是一款针对离线式反激变换器的高性能高集成度准谐振电流模式 PWM 控制器。 SW1108P 内置 6V 的驱动电压,可直接用于驱动氮化镓功率管;芯片工作于带谷底锁定功能 的谷底开启模式,同时集成频率抖动功能以优化 EMI 性能&…

uniapp使用中小问题及解决方法集合

1、 u-input 标签 设置只读、禁用后,click事件不生效 // 解决u-input 标签 设置只读、禁用后,click事件不生效(不弹出弹框) .input-disabled-click {pointer-events: none; }2、 uniapp实现u-datetime-picker时间选择器的默认日期定位,解决d…

HTML 基础标签——表格标签<table>

文章目录 1. `<table>` 标签:定义表格2. `<tr>` 标签:定义表格行3. `<th>` 标签:定义表头单元格4. `<td>` 标签:定义表格单元格5. `<caption>` 标签:为表格添加标题6. `<thead>` 标签:定义表格头部7. `<tbody>` 标签:定义表格…

使用Nginx作为反向代理和负载均衡器

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…

「实战应用」使用 DHTMLX 构建数据透视表,促进有效的数据分析

概述&#xff1a;在本文中&#xff0c;您将了解组织何时选择数据透视表来处理大数据&#xff0c;并熟悉用于在网页上实现此功能的 DHTMLX 工具。 如今&#xff0c;高效处理大数据已成为企业的必需。企业每天必须处理大量数据&#xff0c;以将其转化为可操作的见解并获得竞争优…

Stable diffusion 3.5本地运行环境配置记录

1.环境配置 创建虚环境 conda create -n sd3.5 python3.10Pytorch(>2.0) conda install pytorch2.2.2 torchvision0.17.2 torchaudio2.2.2 pytorch-cuda12.1 -c pytorch -c nvidiaJupyter能使用Anaconda虚环境 conda install ipykernel python -m ipykernel install --user …

第 十 章 积极性,培训以及经验(程序员开发心理学)

1&#xff09;无论我们如何精心地为学习建立一个最佳的物理环境&#xff0c;如果不懂如何利用所有可能的信息来帮助学习&#xff0c;再好的环境也不可能保证手们能够成功地完成学习任务 2&#xff09;为了能够对信息的这种损失有所认识&#xff0c;请看这样一个例子 - 在一次测…

openGauss数据库-头歌实验1-4 数据库及表的创建

一、创建数据库 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;创建指定数据库。 &#xff08;二&#xff09;相关知识 数据库其实就是可以存放大量数据的仓库&#xff0c;学习数据库我们就从创建一个数据库开始吧。 为了完成本关任务&#xff0c;你需要掌握&a…

(自用复习题)常微分方程08

题目来源 常微分方程(第四版) (王高雄,周之铭,朱思铭,王寿松) 高等教育出版社 书中习题4.1 对应知识 非齐次线性微分方程 3.已知齐次线性微分方程的基本解组 x 1 , x 2 x_1,x_2 x1​,x2​&#xff0c;求下列方程对应的非齐次线性微分方程的通解 三道题都是常数变易法 (1)…

CSRF初级靶场

靶场 针对DVWA么有防御 源码&#xff1a; <?phpif( isset( $_GET[ Change ] ) ) {// Get input$pass_new $_GET[ password_new ];$pass_conf $_GET[ password_conf ];// Do the passwords match?if( $pass_new $pass_conf ) {// They do!$pass_new ((isset($GLOBA…

图解TCP三次握手:一步步构建网络会话

在互联网通信中&#xff0c;确保数据传输的可靠性至关重要。TCP三次握手的过程正是为了解决这一问题而设计的。在建立连接之前&#xff0c;客户端和服务器需要确认彼此的存在与准备状态&#xff0c;以防止因网络延迟或数据丢失而导致的错误。通过三次握手&#xff0c;双方不仅能…

[ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-linux)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

讲讲RabbitMQ 性能优化

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲RabbitMQ 性能优化 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一个强大的消息代理&#xff0c;广泛用于分布式系统中&#x…