首页 > > 详细

辅导留学生python设计、python程序讲解、辅导python、python程序讲解、讲解留学生python语言

from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import hashlib
import os
import pymysql
# ?
conn = pymysql.connect(host='localhost',
user='root',
password='glsgbd11',
db='md5',
port=3306,
charset='utf8')
#
cursor = conn.cursor()
# g
class Ui_MainWindow(QtWidgets.QMainWindow):
# ?
def __init__(self):
# ?
super(Ui_MainWindow, self).__init__()
#
self.setupUi(self)
self.retranslateUi(self)
# 
self.paths = []
# 
self.same = []
self.selector_widget = selector()
self.selector_widget.hide()
# 
def add_all(self, path):
# €ぇ?
def check(filename):
# try ラ
try:
# ?
self.log.setText('e?+filename)
# $у, $уmd5
cursor.execute('insert into file'
'(path, size) '
'values("%s", "%s")'
% (filename.replace('\\', '\\\\'),
os.path.getsize(filename)))
conn.commit()
#
except PermissionError:
self.log.setText('')
# ?
except FileNotFoundError:
self.log.setText('?)
# €?
for i in os.walk(path):
for j in i[2]:
# ゆ︽€
if self.selector_widget.selections:
if j.split('.')[-1] not in self.selector_widget.selections:
break
filename = str(i[0]) + '\\' + str(j)
check(filename)
# €d5
def checkMD5(self, path):
# md5
md5_value = hashlib.md5()
with open(path, 'rb') as f:
while True:
# 2048?
data = f.read(2048)
# 
if not data:
break
# $md5?
md5_value.update(data)
# md5?
cursor.execute('update file set md5="%s" where path="%s"'
% (md5_value.hexdigest(), path.replace('\\', '\\\\')))
conn.commit()
# UI
def setupUi(self, MainWindow):
# ″
MainWindow.setObjectName('MainWindow')
# ぇ?
MainWindow.setFixedSize(1000, 1000)
# widget
self.centralWidget = QtWidgets.QWidget(MainWindow)
# widget?
self.centralWidget.setObjectName('centralWidget')
self.retranslateUi(MainWindow)
# ?
#
self.openPath = QtWidgets.QPushButton(self.centralWidget)
# у
self.openPath.setGeometry(QtCore.QRect(50, 50, 100, 75))
# ?
self.openPath.setObjectName('openPath')
# 
self.openPath.setText('')
# ㄤ
self.openPath.clicked.connect(self.openfile)
# ┖?
#
self.clearPath = QtWidgets.QPushButton(self.centralWidget)
# у
self.clearPath.setGeometry(QtCore.QRect(170, 50, 100, 75))
# ?
self.clearPath.setObjectName('clearPath')
# 
self.clearPath.setText('┖')
# ㄤ
self.clearPath.clicked.connect(self.clear)
# 
#
self.openSame = QtWidgets.QPushButton(self.centralWidget)
# у
self.openSame.setGeometry(QtCore.QRect(290, 50, 150, 75))
# ?
self.openSame.setObjectName('openSame')
# 
self.openSame.setText('')
# ㄤ
self.openSame.clicked.connect(self.show)
#
#
self.selector = QtWidgets.QPushButton(self.centralWidget)
# у
self.selector.setGeometry(QtCore.QRect(460, 50, 120, 75))
# ?
self.selector.setObjectName('selector')
# 
self.selector.setText('')
# ㄤ
self.selector.clicked.connect(self.show_selector)
# €?
#
self.startScan = QtWidgets.QPushButton(self.centralWidget)
# у
self.startScan.setGeometry(QtCore.QRect(850, 50, 100, 75))
# ?
self.startScan.setObjectName('startScan')
# 
self.startScan.setText('€?)
# ㄤ
self.startScan.clicked.connect(self.search)
# 〃
# 
self.text1 = QtWidgets.QLabel(self.centralWidget)
# у
self.text1.setGeometry(QtCore.QRect(50, 170, 900, 20))
# ?
self.text1.setObjectName('text1')
# 
self.text1.setText('')
# 〃т
self.pathList = QtWidgets.QListWidget(self.centralWidget)
# у
self.pathList.setGeometry(QtCore.QRect(50, 200, 900, 350))
# ?
self.pathList.setObjectName('pathList')
# €?
# 
self.log = QtWidgets.QLabel(self.centralWidget)
# у
self.log.setGeometry(QtCore.QRect(50, 565, 900, 20))
# ?
self.log.setObjectName('log')
# 〃
# 
self.text2 = QtWidgets.QLabel(self.centralWidget)
# у
self.text2.setGeometry(QtCore.QRect(50, 600, 900, 20))
# ?
self.text2.setObjectName('text2')
# 
self.text2.setText('〃?)
# 〃т
self.sameList = QtWidgets.QListWidget(self.centralWidget)
# у
self.sameList.setGeometry(QtCore.QRect(50, 630, 900, 350))
# ?
self.sameList.setObjectName('sameList')
MainWindow.setCentralWidget(self.centralWidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate('MainWindow', '€'))
# ず
def show_selector(self):
self.selector_widget.show()
# 
def openfile(self):
# 
path = QFileDialog.getExistingDirectory(self, '', '', )
# 
path = path.replace('/', '\\')
# 
if path not in self.paths:
self.paths.append(path)
self.pathList.addItem(path)
# ┖
def clear(self):
# ┖〃т
self.pathList.clear()
# aths
self.paths = []
# €ㄧ?
def show(self):
for p in self.same:
# ?
os.system("start explorer " + p)
# 
def search(self):
# ame
self.same = []
# ┖〃т
self.sameList.clear()
# ?
if len(self.paths):
for p in self.paths:
self.add_all(p)
# md5$
# ユ?
cursor.execute('select path, size from file')
size = cursor.fetchall()
# у€$ぇ
for s in size:
cursor.execute('select path from file where size=%d' % s[1])
if len(cursor.fetchall()) == 1:
cursor.execute('delete from file where path="%s"' % s[0])
# €d5
cursor.execute('select path from file')
for i in cursor.fetchall():
self.checkMD5(i[0])
cursor.execute('select path, md5 from file')
data = cursor.fetchall()
amount = len(data)
for d in data:
# €d5
cursor.execute('select path from file where md5="%s"' % d[1])
same = cursor.fetchall()
# ?
cursor.execute('delete from file where md5="%s"' % d[1])
# ユ?
if len(same) > 1:
utput = ''
# md5
output += 'D5:%s\n' % d[1]
for s in same:
# ?
output += '%s\n' % s[0]
p = '\\'.join(s[0].split('\\')[:-1]) + '\\'
if p not in self.same:
self.same.append(p)
self.sameList.addItem(output)
self.log.setText('€%d? % amount)
# ?
class selector(QtWidgets.QMainWindow):
# ?
def __init__(self):
# €?
self.file_type = ['.jpg', '.png', '.doc', '.txt', '.rar', '.zip']
# €?
self.selections = []
# ?
super(selector, self).__init__()
#
self.setupUi(self)
self.retranslateUi(self)
# UI
def setupUi(self, MainWindow):
# ″
MainWindow.setObjectName('MainWindow')
# ぇ?
MainWindow.setFixedSize(300, 300)
# widget
self.centralWidget = QtWidgets.QWidget(MainWindow)
# widget?
self.centralWidget.setObjectName('centralWidget')
self.retranslateUi(MainWindow)
# €
# 
self.text = QtWidgets.QLabel()
# у
self.text.setGeometry(QtCore.QRect(30, 240, 0, 30))
# ?
self.text.setObjectName('text')
# 
self.text.setText('€わ?)
# €list
self.checkbox_list = []
#
for i in range(len(self.file_type)):
# €
cb = QCheckBox(self.file_type[i], self)
#
cb.move(30, 30*i+30)
#
cb.stateChanged.connect(self.change)
#
self.checkbox_list.append(cb)
MainWindow.setCentralWidget(self.centralWidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate('MainWindow', ''))

def change(self, state):

check = self.sender()

if state == Qt.Checked:

if check.text() not in self.selections:

self.selections.append(check.text())

else:

if check.text() in self.selections:
self.selections.remove(check.text())
if __name__ == '__main__':
cursor.execute('drop table if exists file')
cursor.execute('create table if not exists file'
'(path varchar(300) primary key, '
'md5 varchar(32), '
'size bigint default -1)')
conn.commit()
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_()

联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!