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

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。

三、测试示例

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/199651.html

相关文章:

  • 【(数据结构)— 双向链表的实现】
  • 酷克数据发布HD-SQL-LLaMA模型,开启数据分析“人人可及”新时代
  • FL Studio21最新中文破解进阶高级完整版安装下载教程
  • MDN--Web性能
  • Vue3.js:自定义组件 v-model
  • AI虚拟主播开发实战(附源码)
  • innoDB如何解决幻读
  • Git - 导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法
  • 【Javascript】‘var‘ is used instead of ‘let‘ or ‘const‘
  • 金融统计学方法:神经网络
  • 任何人不知道这款超实用的配音软件,我都会伤心的OK?
  • Linux查看日志文件的常用命令
  • AcWing算法分享系列——二分图
  • 【Excel单元格类型的解析校验】Java使用POI解析excel数据
  • 【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)
  • 为什么要在电影院装监控?有什么作用?
  • 攻防世界题目练习——Web引导模式(三)(持续更新)
  • Python制作PDF转Word工具(Tkinter+pdf2docx)
  • 有哪些手段可以优化 CSS, 提高性能
  • ARM可用的可信固件项目简介
  • 信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)
  • Naive UI数据表格分页pageCount配置没效果
  • Kibana Discover数据查询
  • 笔记 | 编程经验谈:如何正确的使用内存
  • C语言入门-1.1 C语言概述
  • 周记之学习总结
  • 程序设计:C++ 一个可以放入共享内存的string模板
  • 【EI会议征稿】第三届应用力学与先进材料国际学术会议(ICAMAM 2024)
  • Python -- I/O编程
  • langchain入门指南和实战