PyQt学习笔记-获取Hash值的小工具
目录
- 一、概述
- 1.1 版本信息:
- 1.2 基本信息:
- 1.2.1 软件支持的内容:
- 1.2.2 支持的编码格式
- 1.3 软件界面图
- 二、代码实现
- 2.1 View
- 2.2 Controller
- 2.3 Model
- 三、测试示例
一、概述
本工具居于hashlib+PyQt+QFileDialog写的小工具,主要是为了简单的获取相关文件或者一些数据的哈希值数据。
1.1 版本信息:
- PyQt5 5.14.0
- PyQt5-sip 12.12.2
- pyqt5-tools 5.14.0.1.7
- Python 3.8.6
- 当前版本:V1.0.0.0
1.2 基本信息:
1.2.1 软件支持的内容:
- 普通文本文件:.txt、.docs、.doc、.xml等
- 图片文件:.png、.gif等
- 压缩包文件:.zip等
- 应用程序:.exe、.msi
- 直接文本框输入文本
- 其他的未进一步验证
注: 打开文件时,数据的文本框中显示的是文件的完整路径,而非具体数据内容。
1.2.2 支持的编码格式
- MD5
- SHA1
- SHA256
1.3 软件界面图

二、代码实现
2.1 View
# _*_ coding:utf-8 _*_from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QGridLayout
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QRadioButton
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):"Main Window"def __init__(self) -> None:"""Init"""super().__init__()self.init_ui()def init_ui(self):"""Init Ui"""self.setMinimumSize(400,300)self.resize(400,300)self.setWindowTitle("Hash Code V1.0.0.0")self.setWindowIcon(QIcon("res\Gear 2.ico"))self.central_widget = QWidget()""" main widget """self.setCentralWidget(self.central_widget)self.layout_main = QGridLayout()self.central_widget.setLayout(self.layout_main)# Hash type buttong.self.layout_hashtype = QHBoxLayout()self.layout_main.addLayout(self.layout_hashtype, 0, 0, Qt.AlignmentFlag.AlignTop)self.radio_md5 = QRadioButton("MD5")self.radio_md5.setChecked(True)self.layout_hashtype.addWidget(self.radio_md5)self.radio_sha1 = QRadioButton("SHA1")self.layout_hashtype.addWidget(self.radio_sha1)self.radio_sha256 = QRadioButton("SHA256")self.layout_hashtype.addWidget(self.radio_sha256)self.layout_hashtype.addStretch(1)self.btn_openfile = QPushButton("打开文件")self.layout_hashtype.addWidget(self.btn_openfile,alignment=Qt.AlignmentFlag.AlignRight)# Dataself.layout_main.addWidget(QLabel("数据:"), 1, 0, Qt.AlignmentFlag.AlignLeft)self.txt_data = QTextEdit()self.txt_data.setToolTip("""打开文件时则获取文件的Hash值,非文件时直接获取文本框中文本的Hash值!\r\n默认清除首尾空格!""")self.layout_main.addWidget(self.txt_data, 2, 0)self.txt_data.setMinimumHeight(50)# Hashself.layout_value = QHBoxLayout()self.layout_main.addLayout(self.layout_value, 3, 0)self.layout_value.addWidget(QLabel("Hash值:"))self.layout_value.addStretch(1)self.btn_clear = QPushButton("清除数据")self.layout_value.addWidget(self.btn_clear, alignment=Qt.AlignmentFlag.AlignRight)self.btn_calc = QPushButton("计算")self.layout_value.addWidget(self.btn_calc, alignment=Qt.AlignmentFlag.AlignRight)self.txt_value = QTextEdit()self.layout_main.addWidget(self.txt_value, 4, 0)
2.2 Controller
# _*_ coding:utf-8 _*_import os
import hashlib
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QGridLayout
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QRadioButtonfrom view.main_view import MainWindowclass MainWindowController(MainWindow):"""The controller of mainwindow"""def __init__(self) -> None:"""Init"""super().__init__()self.btn_openfile.clicked.connect(self.openfile)self.btn_clear.clicked.connect(self.clear)self.btn_calc.clicked.connect(self.gethash)self.show()def openfile(self):"""Open File"""# 打开文件filepath, filetypelist = QFileDialog.getOpenFileName()self.txt_data.setText(filepath)def gethash(self):"""Get Hash Value"""# 判断是否未文件,为文件时读取文件进行校验data = self.txt_data.toPlainText().strip()try:if os.path.exists(data):file = open(data, "rb")data_b = file.read()else:data_b = data.encode("utf-8")except Exception as err:self.txt_value.setText(err)# 计算哈希值,根据不同选项选择不同的算法。if self.radio_md5.isChecked():hash_value = hashlib.md5(data_b).hexdigest()elif self.radio_sha1.isChecked():hash_value = hashlib.sha1(data_b).hexdigest()elif self.radio_sha256.isChecked():hash_value = hashlib.sha256(data_b).hexdigest()else:return# 显示哈希值self.txt_value.setText(str(hash_value).upper())def clear(self):"""Get Hash Value"""self.txt_value.clear()self.txt_data.clear()
2.3 Model
小工具,没有model。
三、测试示例


相关文章:
PyQt学习笔记-获取Hash值的小工具
目录 一、概述1.1 版本信息:1.2 基本信息:1.2.1 软件支持的内容:1.2.2 支持的编码格式 1.3 软件界面图 二、代码实现2.1 View2.2 Controller2.3 Model 三、测试示例 一、概述 本工具居于hashlibPyQtQFileDialog写的小工具,主要是…...
【(数据结构)— 双向链表的实现】
(数据结构)— 双向链表的实现 一.双向链表的结构二. 双向链表的实现2.1 头文件 ——双向链表的创建及功能函数的定义2.2 源文件 ——双向链表的功能函数的实现2.3 源文件 ——双向链表功能的测试2.4 双向链表各项功能测试运行展示2.4.1 双向链表的初始化…...
酷克数据发布HD-SQL-LLaMA模型,开启数据分析“人人可及”新时代
随着行业数字化进入深水区,企业的关注点正在不断从“数字”价值转向“数智”价值。然而,传统数据分析的操作门槛与时间成本成为了掣肘数据价值释放的阻力。常规的数据分析流程复杂冗长,需要数据库管理员设计数据模型,数据工程师进…...
FL Studio21最新中文破解进阶高级完整版安装下载教程
目前水果软件最版本是FL Studio21,它让你的计算机就像是全功能的录音室,大混音盘,非常先进的制作工具,让你的音乐突破想象力的限制。喜欢音乐制作的小伙伴千万不要错过这个功能强大,安装便捷的音乐软件哦!如…...
MDN--Web性能
CSS 动画与 JavaScript 动画 动画的实现可以有很多种方式,比如 CSS transition 和 animation 或者基于 JavaScript 的动画(使用 requestAnimationFrame()) CSS 过渡和动画 CSS transiton :创建当前样式与结束状态样式之间的动画。尽管一个元素处于过渡状态中&…...
Vue3.js:自定义组件 v-model
Vue3的自定义v-model和vue2稍有不同 文档 https://cn.vuejs.org/guide/components/v-model.html 目录 原生组件自定义组件CustomInput实现代码1CustomInput实现代码2 v-model 的参数 原生组件 <input v-model"searchText" />等价于 <input:value"s…...
AI虚拟主播开发实战(附源码)
人工智能 文章目录 人工智能前言 前言 https://blog.csdn.net/icemanyandy/article/details/124035967...
innoDB如何解决幻读
Mysql的事务隔离级别 Mysql 有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读、不可重复读、幻读的问题。其中 InnoDB 在 RR 的隔离级别下,解决了幻读的问题 事务隔离级别脏读不可重复读幻读未提交读ÿ…...
Git - 导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法
概述 本次集中总结了Git4个常规操作,导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法,希望帮助到正在辛苦寻找的你。 .gitignore忽略文件 之前开发和部署服务比较仓促,所以有很多图片文件一起加载到服务中&#…...
【Javascript】‘var‘ is used instead of ‘let‘ or ‘const‘
解决: 设置完之后,var 就不会再出现黄色波浪线警告...
金融统计学方法:神经网络
目录 1.神经网络 2.深度神经网络 3.案例分析 1.神经网络 神经网络是模仿人脑神经元工作原理而设计的一种算法模型。在一个基本的神经网络中,存在多个“神经元”或称为“节点”,这些节点被组织成多个层次。每个节点都接收前一层的输入,进行…...
任何人不知道这款超实用的配音软件,我都会伤心的OK?
看完一段精彩的视频,令人陶醉的原因之一就是配音,有的充满感情,有的字正腔圆,相信很多人都不知道这样的声音是怎么配出来的?今天,小编就来给大家分享一款超实用的配音软件,不仅操作简单…...
Linux查看日志文件的常用命令
1、查看文件最后1000行内容 tail -n 1000 filename 2、实时查看文件最后1000行内容,动态刷新 tailf -n 1000 filename tail -f -n 1000 filename 3、按照关键字搜索日志 cat filename | grep 关键字 4、按照关键字搜索并包含前(后)多少行 【(A前B后C前…...
AcWing算法分享系列——二分图
这是AcWing算法分享系列的第一篇文章,我们先从图论的知识下手(因为我觉得图论的只是好理解些)。 这次我们主要讲的就是二分图,二分图这次我们主要讲的就是最基础的两个板块: 二分图的判定(染色法)二分图的完美匹配(匈牙利算法)我们这一篇文章先从二分图的概念开始入手…...
【Excel单元格类型的解析校验】Java使用POI解析excel数据
一、使用的maven依赖: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version> </dependency> <dependency><groupId>org.apache.poi</groupId&…...
【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)
CI/CD是持续集成,持续部署,集成就是开发人员通过自动化编译,发布,测试的手段集成软件,在开发的测试环境上测试发现自己的错误;持续部署是自动化构建,部署,通常也是在测试环境上进行&…...
为什么要在电影院装监控?有什么作用?
近期小编在网上看到有很多人在讨论:电影院的摄像头有多高清?看电影时的小动作放映员都能看得一清二楚?答案是:是的。但大家也不必有心理负担,电影院的监控目的不是为了监控观众,更多的是为了保障观影者的权…...
攻防世界题目练习——Web引导模式(三)(持续更新)
题目目录 1. mfw2. Cat3.4.5. 1. mfw 进去看到网页和页面内容如下: 看到url的参数 ?pageabout ,我以为是文件包含什么的,反复试了几次,想用 …/…/…/…/etc/passwd ,但是发现.似乎被过滤了,实在不知道怎…...
Python制作PDF转Word工具(Tkinter+pdf2docx)
一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错,安装完成引入from pdf2docx import Converter运行也可能报错,可以根据报错提示看缺少那些库,先卸载pip uninstall xxx,使用pip install python-docx -i htt…...
有哪些手段可以优化 CSS, 提高性能
CSS优化是Web开发中提高性能和用户体验的关键部分。下面详细解释一些CSS优化的方法,以提高性能: 合并和压缩CSS文件: 合并文件:将多个CSS文件合并成一个,以减少HTTP请求次数。这可以通过构建工具(如Webpack)…...
Llama Vision-Instruct多模态AI部署与优化实战
1. 项目概述Llama Vision-Instruct模型的推出标志着多模态AI技术进入了一个新阶段。这个项目将视觉理解与指令跟随能力相结合,通过DigitalOcean的1-Click GPU Droplets部署方案,让开发者能够快速搭建和运行这类前沿AI模型。我在实际部署过程中发现&#…...
第88篇:AI+环境保护与气候研究——污染监测、物种识别与气候建模(项目实战)
文章目录项目背景技术选型架构设计核心实现1. 黑烟车识别 (基于YOLOv8)2. PM2.5浓度时序预测 (基于Informer)踩坑记录效果对比项目背景 这几年做AI项目,从互联网卷到传统行业,一个很深的感触是:AI技术真正产生巨大价值的,往往是那…...
农业AI评估框架Garden V1:精准农业的模型性能测试
1. 项目概述:IFAD AI Benchmark (Garden V1) 的定位与价值IFAD AI Benchmark (Garden V1) 是一个面向农业智能化场景的AI模型性能评估框架。这个项目最初源于我们在精准农业项目中遇到的实际需求——当我们需要比较不同计算机视觉模型在农作物生长监测任务中的表现时…...
LLM性别偏见评估:Wino Bias测试与实践
1. 项目背景与核心目标最近在自然语言处理领域,大型语言模型(LLM)在各类基准测试中展现出惊人表现。但作为从业者,我们更关心这些模型在实际应用中可能存在的隐性偏见。这个项目聚焦于一个具体但重要的问题:如何系统评估LLM在性别-职业刻板印…...
Python量化回测框架Quantdom:从事件驱动到策略优化的实战指南
1. 从零到一:量化回测框架 Quantdom 深度解析如果你和我一样,在金融科技或者量化交易这个圈子里摸爬滚打了好些年,那你肯定对“回测”这个词又爱又恨。爱的是,它给了我们一个相对安全的沙盒,去验证那些在深夜灵光一现的…...
梯度下降算法原理与实践指南
1. 梯度下降的本质与直观理解梯度下降算法就像一位蒙着眼睛的滑雪者试图从山顶安全滑到山脚。这位滑雪者无法直接看到整座山的全貌,只能通过脚下的坡度感知当前所处位置的倾斜方向。每次他都会沿着最陡峭的下坡方向迈出一小步,通过不断重复这个过程&…...
解决Caused by: java.net.UnknownHostException: mysql: Name or service not knownorg.hibernate.exception
报错:book-manager-app | 2026-04-26T10:06:31.294Z ERROR --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure book-manager-app | Caused by: java.net.UnknownHostException: mysql: Name or service not known book-manager-a…...
2026年招牌广告灯箱实力厂商推荐,聚隆运灯箱为何成为连锁品牌首选,赋能商业未来的专业解决方案
行业定位:招牌广告灯箱在商业视觉传达中的核心价值在当今商业环境中,招牌广告灯箱不仅是店铺门面的视觉标识,更是品牌形象传递的重要载体。作为广告行业的基础设施,高品质的招牌广告灯箱能有效提升品牌辨识度,增强夜间…...
CentOS 7.9 老系统升级QEMU 6.2.0完整指南:从GCC 11到Python 3.9的依赖全搞定
CentOS 7.9 老系统升级QEMU 6.2.0完整指南:从GCC 11到Python 3.9的依赖全搞定 在虚拟化技术快速迭代的今天,许多企业仍在使用CentOS 7.9这样的"老将"系统。当我们需要在这些稳定但略显陈旧的系统上部署新版QEMU时,往往会遇到工具链…...
梯度提升算法(GBDT)实战:四大库对比与优化技巧
1. 梯度提升算法家族概览在机器学习实战中,梯度提升(Gradient Boosting)堪称解决结构化数据问题的"瑞士军刀"。不同于随机森林的并行决策树策略,梯度提升采用串行方式构建模型,每一轮都针对前一轮的预测残差…...
