PyQt5实战——多脚本集合包,程序入口QMainWindow(三)

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

系列往期文章:
PyQt5实战——多脚本集合包,前言与环境配置(一)
PyQt5实战——多脚本集合包,UI以及工程布局(二)

PyQt程序入口(QMainWindow)

main.py是程序的入口,程序最开始运行的文件,在这个文件中,需要完成以下几件事:

  • 创建一个MainWindow(主窗口)
  • 设置主窗口的标题,图标
  • 设置窗口的主体(centralWidget)
  • 设置窗口的状态栏
  • 创建workspaces目录
  • 运行窗口
import sys
import os 
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *import PrimeWindowclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Script Tools")self.setWindowIcon(QIcon("_internal/res/icon/icon.ico"))centralWidget = PrimeWindow.PrimeWindow()self.setCentralWidget(centralWidget)self.addStatusBar()def addStatusBar(self):self.statusBar = QStatusBar()self.statusWidget = QWidget()self.statusLayout = QHBoxLayout()self.copyrightlable = QLabel("© Author: LyricalRover. All rights reserved.")self.versionlable = QLabel("Last updated: 2024-10-18. Version: 1.3.1")self.statusLayout.addWidget(self.copyrightlable)self.statusLayout.addStretch()self.statusLayout.addWidget(self.versionlable)self.statusWidget.setLayout(self.statusLayout)self.statusBar.addWidget(self.statusWidget)self.setStatusBar(self.statusBar)if __name__ == "__main__":app = QApplication(sys.argv)w = MainWindow()if not os.path.exists("workspaces"):os.makedirs("workspaces")w.show()app.exec()

最开始进入的地方是:if__name__ == “_main_”:

app = QApplication(sys.argv)初始化应用程序对象

1. QApplication

  • QApplication 是 Qt 应用程序的主类,负责管理应用程序的控制流和主要设置。
  • 它处理应用程序的主事件循环,并为 GUI 元素提供必要的支持。
  • 每个使用 Qt 的应用程序通常需要一个 QApplication 实例。

2. sys.argv 的作用

  • sys.argv 是一个列表,包含命令行参数。这些参数是在运行 Python 脚本时传递的。
  • QApplication 可以使用这些参数来配置应用程序的行为,例如窗口大小、样式等。

3. 初始化应用程序

通过 app = QApplication(sys.argv),你完成了以下几个步骤:

  • 创建应用程序对象:这行代码创建了一个 QApplication 的实例,并将命令行参数传递给它。
  • 设置事件循环:这个实例负责管理 GUI 的事件循环,使得应用程序能够响应用户输入和事件(例如鼠标点击、键盘输入等)。
  • 为应用程序提供上下文QApplication 提供了关于应用程序的信息,例如样式、主题、字体等。

创建MainWindow对象,即运行上面的class中的代码

def __init__中,设置窗口的标题,设置窗口的图标,在这里可以看到,设置图标的路径是:_internal/res/icon/icon.ico,但我们并没有创建这个__internal的目录,回顾环境配置中pyinstaller部分的讲解:“pyinstaller在v6.0版本以后,数据将被移动到__internal目录下”,也就是说,如果我们打包程序形成exe文件后,想要文件能够正确找到icon的地址,则必须在你写的地址前加上__internal目录,配合上打包时的参数,-add-data "icon.ico;__internal/res/icon/icon.ico",就可以在打包后显示正常的图标。

centralWidget = PrimeWindow.PrimeWindow()

上面的代码是创建一个UI主体,该主体是PrimeWindow对象,这个类在PrimeWindow.py中,这个主体内具体是怎样的后面会讲到。

addStatusBar的结构如下图所示:

请添加图片描述

左右分别是两个label的Widget,分别装了两条信息,中间用addStretch弹簧将两个label分压向两侧。

理想很丰满,现实很骨感,实际上并没有呈现出这样一个操作,我猜测应该是有另一个东西阻碍了StatusBar,并没有完整占据整个窗口的下方,也就是说,StatusBar本身被压缩了,导致versionlabel并没有被压向窗口主体的右侧。但具体原因尚不明朗。

还有一点值得注意的是:

我在引入第三方库的时候因为偷懒使用了“*”,即:from PyQt5.QtWidgets import *等。

建议使用了什么就引入import什么,而不是为了图方便而直接使用“*”,理由如下:

  1. python模块的导入实际上是通过import来进行导入的,一个模块一旦被导入,后续的导入操作则直接从缓存中读出,而不会重复导入,这就说明,在初次操作时,需要加载导入内容,如果使用“*”,初次导入的时间开销会更多一些,但后续的性能差别并不明显。
  2. 由于import *会导入所有的公共成员,因此它可能会占用更多的内存,因此空间开销会更大。
  3. 使用更明确的导入方式,会有助于代码的可读性,避免不必要的模块加载,减少潜在的时间和空间开销,同时较少命名冲突的风险,这种情况在大型项目中更为明显。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

A018基于Spring Boot的民宿租赁系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

中酱:重新定义“健康三境“

王国维在《人间词话》中提出过人生的三重境界。 “昨夜西风凋碧树。独上高楼,望尽天涯路。”此为第一境界 说的是人的立志之境:直面迷茫,内心坚定不移,明确自己追求的方向。 “衣带渐宽终不悔,为伊消得人憔悴。”此为…

基于ESP32的桌面小屏幕实战[2]:硬件设计之充电管理

1. 硬件基础知识 1.1 原理图设计、PCB设计、PCB(电路板)、PCBA(电路板元器件)分别长什么样? 1.2 高低电平 一般可以理解为输出电压VCC就是高电平,输出电压GND(一般是0V)就是低电平…

有代码VISTA: Visual-Textual Knowledge Graph Representation Learning

摘要 知识图用实体和关系组成的三元组来表示人类的知识。虽然现有的知识图嵌入方法大多只考虑知识图的结构,但最近提出的一些多模态方法利用知识图中实体的图像或文本描述。在本文中,我们提出了视觉文本知识图(VTKGs)&#xff0c…

C语言 | Leetcode C语言题解之第523题连续的子数组和

题目&#xff1a; 题解&#xff1a; struct HashTable {int key, val;UT_hash_handle hh; };bool checkSubarraySum(int* nums, int numsSize, int k) {int m numsSize;if (m < 2) {return false;}struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeo…

Kimi的论文语言润色技巧:38个提示词让你的写作更专业

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作中&#xff0c;语言的精准与流畅性是衡量论文质量的重要标准。Kimi作为一款先进的AI助手&#xff0c;为论文润色提供了全新的解决方案。本文将分享38个实用的Kimi提示词&…

如何利用大规模外链爆发提升SEO效果?

如果你的网站需要在短时间内实现大幅度流量增长&#xff0c;那么GMB外链无疑是最具爆发力的外链策略之一。这种外链策略通过大规模的外链发布&#xff0c;能够在短期内迅速推动网站的数据收录&#xff0c;并带来显著的SEO效果。 GMB外链的最大特点在于其数量的爆发性。一次群发…

去除人声的利器:消音伴奏软件合集

消音伴奏软件可以指专业的音频编辑软件&#xff0c;也可以指近几年出现的很多消音提伴奏的AI工具。这类软件的主要作用就是帮我们去除歌曲或者视频中的人声&#xff0c;从而提取出纯净的伴奏或者背景音乐。目前市面上有哪些知名且好用的消音伴奏软件&#xff1f;我们应该怎样选…

【前端】JavaScript 方法速查大全-对象(二)

&#x1f525; 前言 在现代Web开发中&#xff0c;JavaScript已经成为不可或缺的编程语言。无论是前端开发还是后端服务&#xff0c;JavaScript都扮演着重要角色。为了帮助开发者更高效地使用JavaScript&#xff0c;本文将为您提供一个全面、系统的JavaScript方法参考&#xff…

复习数据库(外键约束)下篇

目录 前言 认识外键 外键的特点 外键的设计方式 多对多 组合主键 一对多/多对一 一对一 外键和外键约束的关系 外键的使用 添加约束 在建表时添加外键约束 如果已经创建表了,那我们可以修改表的方式给表添加外键约束: 应用实例 删除约束 删除/更新行为 含义 …

深入理解 Kafka:分布式消息队列的强大力量

一、引言 在现代分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而 Kafka 作为其中的佼佼者&#xff0c;以其高吞吐量、可扩展性和持久性等特点被广泛应用。无论是处理海量的日志数据、实时的用户交互信息&#xff0c;还是复杂的微服务间通信&#xff0c;Ka…

Jekins篇(搭建/安装/配置)

目录 一、环境准备 1. Jenkins安装和持续集成环境配置 2. 服务器列表 3. 安装环境 Jekins 环境 4. JDK 环境 5. Maven环境 6. Git环境 方法一&#xff1a;yum安装 二、JenKins 安装 1. JenKins 访问 2. jenkins 初始化配置 三、Jenkins 配置 1. 镜像配置 四、Mave…

mmpose框架进行人体姿态识别模型HRNet训练

进行训练之前要先进行标注及数据增强&#xff0c;标注工具写在另一篇&#xff0c;首先讲数据增强。 数据增强 进行简单的色彩变换和位置变换&#xff0c;代码如下&#xff1a; from PIL import Image, ImageEnhance import numpy as np import os import glob import json im…

Dinky中配置Flink集群

需要启动yarn-session 进程&#xff0c;在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出&#xff1a;JobManager Web Interface 在dinky中进行配置&#xff1a; 集群配置 Hadoop 配置&#xff1a; H…

Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑

一、前言 接上回说到&#xff0c;修改了程序&#xff0c;增加了接口&#xff0c;却不知道有没有什么问题&#xff0c;于是心怀忐忑等了几天。果然过了几天&#xff0c;应用那边的小伙伴报过来了问题。用户证书安装没有问题&#xff0c;系统证书(新增的接口)还是出现了问题。调…

hashcat爆破rar密码

背景&#xff1a; 在一道CTF题目的时候遇到了一个rar加密压缩包&#xff0c;记录一下爆破过程。 过程&#xff1a; 1、在前一个压缩包里面发现密码提示 2、file查看文件类型&#xff0c;发现是RAR v5&#xff0c;无法使用ARCHPR爆破&#xff0c;排除&#xff1b; 3、使用Pa…

构建多维分类知识库:Spring Boot实战

1 绪论 1.1 研究背景 在这个推荐个性化的时代&#xff0c;采用新技术开发一个多维分类的知识管理系统来分享和展示内容是一个永恒不变的需求。本次设计的多维分类的知识管理系统有管理员和用户两个角色。 管理员可以管理用户信息&#xff0c;知识分类&#xff0c;知识信息等&am…

深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程

大家好,我是微学AI,今天给大家介绍一下深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程。 混合专家模型(Mixture of Experts, MoE)是一种创新性的神经网络架构,巧妙地结合了 问题分类 和 领域专家 的概念。在这种架构中,输入数据首先经过一个门控网络…

AI + 绘画 | 100个可变现的渠道、方式

商机&#xff1a;AI绘画技术在美发⾏业的应⽤&#xff0c;旨在降低视频和图⽂制作成本&#xff0c;提升服务展⽰效果。通过AI技术&#xff0c;可以轻松展⽰发型设计前后对⽐&#xff0c;解决顾客与发型师之间的沟通难题。 变现&#xff1a; 1.⽣产图⽂内容或教程&#xff0c;…

[vulnhub]Empire: Breakout

https://www.vulnhub.com/entry/empire-breakout,751/ 端口扫描主机发现 探测存活主机&#xff0c;183是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-05 23:37 CST Nmap scan report for 192.168.75.1 Host is up (0.00045s latency…