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全局变量操作详解
Apr 14 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
Python Lambda函数使用总结详解
Dec 11 Python
Python无损压缩图片的示例代码
Aug 06 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
python_tkinter弹出对话框创建
Mar 20 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
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
Python 中 list 的各项操作技巧
2017/04/13 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
中海讯通笔试题
2015/09/15 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
行政人事岗位职责
2014/03/17 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL