python+pyqt5编写md5生成器


Posted in Python onMarch 18, 2019

本文实例为大家分享了python+pyqt5编写md5生成器的具体代码,供大家参考,具体内容如下

学了一下pyqt5,写一个小程序来实践一下。

下图是程序界面:

python+pyqt5编写md5生成器

下面是代码:

import hashlib, os, sys

from PyQt5.QtGui import QFont, QIcon
from PyQt5.QtWidgets import (QFileDialog,
 QGridLayout, QLineEdit, QTextEdit,QLabel, QWidget, QToolTip, 
 QPushButton, QApplication)
from PyQt5.QtCore import QCoreApplication

#小文件的处理函数
def get_md5_small(file_path):
 md5 = None
 if os.path.exists(file_path) and os.path.isfile(file_path):
  with open( file_path, 'rb' ) as f:
   md5_obj = hashlib.md5()
   md5_obj.update( f.read() )
   hash_code = md5_obj.hexdigest()

   md5 = str(hash_code).lower()

 return md5

#大文件的处理函数
def get_md5_big(file_path):
 md5 = None
 if os.path.exists(file_path) and os.path.isfile(file_path):
  with open( file_path, 'rb' ) as f:
   md5_obj = hashlib.md5()
   while True:
    d = f.read(8096)
    if not d:
     break
    md5_obj.update(d)
   hash_code = md5_obj.hexdigest()
   md5 = str( hash_code ).lower()

 return md5

class MainBody(QWidget):
 def __init__(self):
  super(MainBody, self).__init__()
  self.init()

 def init(self):
  #布局
  grid = QGridLayout()
  self.setLayout(grid)
  grid.setSpacing(10)

  #文件路径
  self.m_tedit = QTextEdit()
  self.m_tedit.setToolTip( u'可以拖拽文件到这里来' )
  grid.addWidget(self.m_tedit, 1, 0, 2, 3)

  #四个按钮
  self.m_select_btn = QPushButton(u'选择文件')
  self.m_select_btn.clicked.connect( self.select_func )

  self.m_generate_btn = QPushButton(u'生成')
  self.m_generate_btn.clicked.connect( self.generate_func )

  self.m_clear_btn = QPushButton(u'清空')
  self.m_clear_btn.clicked.connect( self.clear_func )

  self.m_copy_btn = QPushButton(u'复制')
  self.m_copy_btn.clicked.connect( self.copy_func )

  grid.addWidget(self.m_select_btn, 3, 0)
  grid.addWidget(self.m_generate_btn, 3, 1)
  grid.addWidget(self.m_clear_btn, 3, 2)
  grid.addWidget(self.m_copy_btn, 5, 1)

  #md5的输出区域
  self.m_output = QLineEdit()
  grid.addWidget(self.m_output, 4, 0, 1, 3)

  self.setGeometry(300,300,300,200)
  self.setWindowTitle(u"md5生成器")
  self.setWindowIcon(QIcon('icon.png'))
  self.show()

 #选择文件
 def select_func(self):
  filename, ok = QFileDialog.getOpenFileName(self, "Open file", "C:/Users/Administrator/Desktop")
  print(os.path.getsize(filename))
  self.m_tedit.setText( filename )
  self.m_output.clear()

 #生成md5按钮
 def generate_func(self):
  path = self.m_tedit.toPlainText()
  if path.startswith( 'file:///' ):
   path = path[8:]

  if os.path.exists(path) and os.path.isfile(path):
   #200M以上的当作大文件
   if os.path.getsize(path) >= 200*1024*1204:
    md5 = get_md5_big( path )
   else:
    md5 = get_md5_small( path )
   self.m_output.setText( md5 )

 def clear_func(self):
  self.m_tedit.clear()
  self.m_output.clear()

 #复制
 def copy_func(self):
  clipboard = QApplication.clipboard()
  clipboard.setText( self.m_output.text() )

if __name__ == "__main__":
 app = QApplication(sys.argv)
 mb = MainBody()
 sys.exit( app.exec_() )

最后用 pyinstaller 打包成 exe 文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用MethodType绑定方法到类示例代码
Aug 27 Python
python生成ppt的方法
Jun 07 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
python用for循环求和的方法总结
Jul 08 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
python+pyqt5实现图片批量缩放工具
Mar 18 #Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 #Python
PyQt5实现简易计算器
May 30 #Python
Python实现简单层次聚类算法以及可视化
Mar 18 #Python
PyQt5实现简单数据标注工具
Mar 18 #Python
Python简单I/O操作示例
Mar 18 #Python
python实现简单图片物体标注工具
Mar 18 #Python
You might like
php生成固定长度纯数字编码的方法
2015/07/09 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
js 单引号 传递方法
2009/06/22 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
校庆接待方案
2014/03/18 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
买房协议书范本
2014/10/23 职场文书
大学生英文求职信范文
2015/03/19 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS