当前位置: 首页 > news >正文

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目录下,部分功能过于复杂无法用一个文件完成也可以再建立子目录。

重复调用

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

相关文章:

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

个人博客:苏三有春的博客 系列往期: PyQt5实战——多脚本集合包,前言与环境配置(一) 布局 2.1 UI页面布局 整体框架分为分为三个部分,垂直分布。 第一个部分为功能选择按钮(如UTF-8转换&#…...

Python 数据结构对比:列表与数组的选择指南

文章目录 💯前言💯Python中的列表(list)和数组(array)的详细对比1. 数据类型的灵活性2. 性能与效率3. 功能与操作4. 使用场景5. 数据结构选择的考量6. 实际应用案例7. 结论 💯小结 &#x1f4af…...

gem5运行简单RISC-V全系统模拟

简单记录gem5中运行最简单的RISC-V Full System Simulation的过程 首先是编译RISC-V和m5term,这部分不多写了,官网均有对应教程。 之后直接使用官方在configs/example/gem5_library目录下的riscv-fs.py 运行如下命令 ./build/RISCV/gem5.opt configs/…...

洛谷 P1195 口袋的天空

自用。 题目传送门&#xff1a;口袋的天空 - 洛谷 题解&#xff1a;Inori_333 参考题解&#xff1a;题解 P1195 【口袋的天空】 - 洛谷专栏 /*P1195 口袋的天空https://www.luogu.com.cn/problem/P11952024/11/03 submit:inori333 */#include <iostream> #include &…...

ffmpeg视频滤镜:膨胀操作-dilation

滤镜介绍 dilation 官网链接 > FFmpeg Filters Documentation 膨胀滤镜会使图片变的更亮&#xff0c;会让细节别的更明显。膨胀也是形态学中的一种操作&#xff0c;在opencv中也有响应的算子。此外膨胀结合此前腐蚀操作&#xff0c;可以构成开闭操作。 开操作是先腐蚀…...

3.3 windows,ReactOS系统中页面的换出----2,结构体PHYSICAL_PAGE

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

lvgl

lvgl 目录 lvgl Lvgl移植到STM32 -- 1、下载LVGL源码 -- 2、将必要文件复制到工程目录 -- 3、修改配置文件 将lvgl与底层屏幕结合到一块 -- lvgl也需要有定时器,专门给自己做了一个函数,告诉lvgl经过了多长时间(ms(毫秒)级别) 编写代码 lvgl的中文教程手册网站…...

【django】RESTful API 设计指南

目录 一、协议 二、域名 三、版本&#xff08;Versioning&#xff09; 四、路径&#xff08;Endpoint&#xff09; 五、HTTP动词 5.1 CRUD操作&#xff1a; 5.2 其他动词&#xff1a; 六、过滤信息&#xff08;Filtering&#xff09; 七、状态码&#xff08;Status Co…...

提升大数据量分页查询性能:深分页优化全解

前言 在处理数据量逐渐增大的数据库表时&#xff0c;优化查询性能是一个常见的挑战。朋友们可能会建议说&#xff0c;创建索引不就能解决问题了吗&#xff1f;然而&#xff0c;当数据量达到相当规模时&#xff0c;简单的索引可能不足以应对所有情况。这时&#xff0c;可能会有…...

WPF 实现冒泡排序可视化

WPF 实现冒泡排序可视化 实现冒泡排序代码就不过多讲解&#xff0c;主要是实现动画效果思路&#xff0c;本demo使用MVVM模式编写&#xff0c;读者可自行参考部分核心代码&#xff0c;即可实现如视频所示效果。 对于新手了解算法相关知识应该有些许帮助&#xff0c;至于其它类型…...

Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析

Claude 3.5 Sonnet发布PDF图像预览新功能&#xff0c;允许用户分析长度不超过100页的PDF中的视觉内容。 此功能使用户能够轻松上传文档并提取信息&#xff0c;特别适用于包含图表、图形和其他视觉元素的研究论文和技术文档。 视觉PDF分析&#xff1a;用户现在可以从包含各种视觉…...

正式开源:从 Greenplum 到 Cloudberry 迁移工具 cbcopy 发布

Cloudberry Database 作为 Greenplum 衍生版本和首选开源替代&#xff0c;由 Greenplum 原始团队成员创建&#xff0c;与 Greenplum 保持原生兼容&#xff0c;并能实现无缝迁移&#xff0c;且具备更新的 PostgreSQL 内核和更丰富的功能。GitHub: https://github.com/cloudberry…...

Python如何读写文件?

1. 文件读取 &#xff08;1&#xff09;使用open()函数打开文件 基本语法是file_object open(file_name, mode)&#xff0c;其中file_name是要打开的文件的名称&#xff08;包括路径&#xff0c;如果文件不在当前目录下&#xff09;&#xff0c;mode是打开文件的模式。例如&a…...

100种算法【Python版】第38篇——Boyer-Moore算法

本文目录 1 算法说明2 算法示例3 python代码1 算法说明 Boyer-Moore算法由Robert S. Boyer和J. Strother Moore于1977年提出,旨在提高字符串匹配的效率。该算法在寻找固定模式的过程中,利用模式本身的信息,优化搜索过程,特别适合长文本中的模式查找。 算法原理 Boyer-Moo…...

贪心算法---java---黑马

贪心算法 1)Greedy algorithm 称之为贪心算法或者贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则&#xff0c;选取当前最优解因为未考虑所有可能&#xff0c;局部最优的堆叠不一定得到最终解最优 贪心算法例子 Dijkstra while …...

程序员的减压秘籍:高效与健康的平衡艺术

引言 在当今竞争激烈的科技行业中&#xff0c;程序员常常面临着极高的精神集中要求和持续的创新压力。这种工作性质让许多程序员在追求高效和创新的过程中&#xff0c;感到精疲力竭&#xff0c;面临身心健康的挑战。因此&#xff0c;找到有效的方法来缓解工作压力&#xff0c;…...

2024 年 QEMU 峰会纪要

2024 年 QEMU 峰会已于 10 月 31 日在 KVM 论坛召开&#xff0c;这是一个仅对项目中最活跃的维护者和子维护者开放的邀请会议。 出席者&#xff1a; Dan Berrang Cdric Le Goater Kevin Wolf Michael S. Tsirkin Stefan Hajnoczi Philippe Mathieu-Daud Markus Armbruster Th…...

C++/list

目录 1.list的介绍 2.list的使用 2.1list的构造 2.2list iterator的使用 2.3list capacity 2.4list element access 2.5list modifers 2.6list的迭代器失效 3.list的模拟实现 4.list与vector的对比 欢迎 1.list的介绍 list的文档介绍 cplusplus.com/reference/list/li…...

刘艳兵-DBA015-对于属于默认undo撤销表空间的数据文件的丢失,哪条语句是正确的?

对于属于默认undo撤销表空间的数据文件的丢失&#xff0c;哪条语句是正确的&#xff1f; A 所有未提交的交易都将丢失。 B 数据库实例中止。 C 数据库处于MOUNT状态&#xff0c;需要恢复才能打开。 D 数据库保持打开状态以供查询&#xff0c;但除具有SYSDBA特权的用…...

树莓派基本设置--10.使用MIPI摄像头

树莓派5将以前的CSI和DSI接口合并成两个两用的CSI/DSI&#xff08;MIPI&#xff09;端口。 一、配置摄像头 使用树莓派摄像头或第三方相机可以按照下面表格修改相机配置&#xff1a; 摄像头模块文件位于&#xff1a;/boot/firmware/config.txtV1 相机 &#xff08;OV5647&am…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...