python写界面c这算法_Python 图形用户界面实战 : PyQt5 实现摘要算法计算!

说起Python的图形用户界面 (GUI, Graphical User Interface)设计,就让人想到python的很多GUI库,比如标准库tkinter和第三方库PyQt5,wxpython等等,在这里我推荐使用PyQt5,因为它有个工具叫Qt Designer,可以直接手动设置界面,把控件拖放到指定位置去。而且QT支持的控件比标准库tkinter多,而且还比它设计的GUI好看,所以我用上PyQt5后就强烈的喜欢了它。

Qt Designer打开后界面

Pyqt5安装用pip安装即可,QtDesigner配置和安装详见:

接下来介绍一下摘要算法,消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文,比如如下代码:

>>> import hashlib as h

>>> str1='你打球像蔡徐坤'

>>>bytestring=str1.encode('UTF-8') #生成bytes类型

>>> m=h.md5() #产生MD5对象

>>> m.update(bytestring) #把产生的bytes加入到m对象中

>>> m.hexdigest() #生成摘要

'edea833bc2b9c8d69cffdc2a93151df1'

只有2个bytes类型的字符串完全相同,他们生成的摘要才完全一致,稍微改动一处地方生产的摘要就完全不一样,比如

字符串(utf-8编码)

摘要md5

消息摘要算法的主要特征是加密过程不需要密钥

e408fc959a50d64ebac335841f98ed88

消息摘要算法的主要特征是加密过程不需要密钥?

1a9890a26144bc94bee18a53a7c83faa

Python的标准库hashlib有很多这样的加密算法,除了经典的MD5还有sha1,sha224,sha512等。

当Qt Desiger配置好后,我们打开它

生成一个空白的界面

按如下设计:

将对象Form的windowTitle属性改为摘要算法

组合框内容如下,注意第一个是默认

最后保存,生成ui文件,如果你使用pycharm的话,最好将ui文件保存到pycharm的文件夹内,然后这样

就在同一个文件夹下,生成同名的.py文件了!

打开那个同名的py文件,我们看到生成了一个名叫Ui_Form的类和它的两个方法setupUi和retranslateUi,这两个方法在做什么估计看一下大家都懂了,我们不必理解pyqt5的代码,首先在首行导入sys库hashlib库(简写为h),在同名的py文件末尾,加上

app = QtWidgets.QApplication(sys.argv)

mainWindow = QtWidgets.QMainWindow()

ui = Ui_Form()

ui.setupUi(mainWindow)

mainWindow.show()

sys.exit(app.exec_())

然后点击运行,刚刚做出来的界面就活灵活现的展现了出来,就是点击按钮没反应

我们需要给按钮增加一个信号槽(当点击事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。)

我们给Ui_Form的类增加一个方法,叫做jisuan

sf={'md5':h.md5,'sha1':h.sha1,'sha224':h.sha224,'sha256':h.sha256,

'sha384':h.sha384,'sha512':h.sha512,'sha3_224':h.sha3_224,

'sha3_256':h.sha3_256,'sha3_384':h.sha3_384,'sha3_512':h.sha3_512}

def jisuan(self):

zhaiya=self.comboBox.currentText()

bianma = self.comboBox_2.currentText()

string=self.plainTextEdit.toPlainText()

fun=sf[zhaiya]

sha=fun(string.encode(bianma))

zfc=sha.hexdigest()

self.plainTextEdit_2.setPlainText(zfc)

sf是外部变量,定义一个字典,字典的键值对应字符串和相应的函数,这样我们就定义好了一个这样的函数,最后就是,将这函数和按钮点击链接起来,在setupUi方法最末尾加上

self.pushButton.clicked.connect(self.jisuan)

即可。

点击运行,如下,很优秀。

完整代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '摘要算法.ui'

#

# Created by: PyQt5 UI code generator 5.11.2

#

# WARNING! All changes made in this file will be lost!

importsys

fromPyQt5importQtCore,QtGui, QtWidgets

importhashlibash

sf={'md5':h.md5,'sha1':h.sha1,'sha224':h.sha224,'sha256':h.sha256,

'sha384':h.sha384,'sha512':h.sha512,'sha3_224':h.sha3_224,

'sha3_256':h.sha3_256,'sha3_384':h.sha3_384,'sha3_512':h.sha3_512}

classUi_Form(object):

def setupUi(self,Form):

Form.setObjectName("Form")

Form.resize(367,300)

self.plainTextEdit= QtWidgets.QPlainTextEdit(Form)

self.plainTextEdit.setGeometry(QtCore.QRect(10,20,351,71))

self.plainTextEdit.setObjectName("plainTextEdit")

self.label= QtWidgets.QLabel(Form)

self.label.setGeometry(QtCore.QRect(130,0,101,16))

self.label.setObjectName("label")

self.label_2= QtWidgets.QLabel(Form)

self.label_2.setGeometry(QtCore.QRect(10,100,54,21))

self.label_2.setObjectName("label_2")

self.comboBox= QtWidgets.QComboBox(Form)

self.comboBox.setGeometry(QtCore.QRect(60,100,71,22))

self.comboBox.setObjectName("comboBox")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.comboBox.addItem("")

self.pushButton= QtWidgets.QPushButton(Form)

self.pushButton.setGeometry(QtCore.QRect(260,100,81,31))

self.pushButton.setObjectName("pushButton")

self.groupBox= QtWidgets.QGroupBox(Form)

self.groupBox.setGeometry(QtCore.QRect(0,130,361,161))

self.groupBox.setObjectName("groupBox")

self.plainTextEdit_2= QtWidgets.QPlainTextEdit(self.groupBox)

self.plainTextEdit_2.setGeometry(QtCore.QRect(10,20,351,131))

self.plainTextEdit_2.setObjectName("plainTextEdit_2")

self.label_3= QtWidgets.QLabel(Form)

self.label_3.setGeometry(QtCore.QRect(140,101,31,21))

self.label_3.setObjectName("label_3")

self.comboBox_2= QtWidgets.QComboBox(Form)

self.comboBox_2.setGeometry(QtCore.QRect(170,100,71,22))

self.comboBox_2.setObjectName("comboBox_2")

self.comboBox_2.addItem("")

self.comboBox_2.addItem("")

self.pushButton.clicked.connect(self.jisuan)

self.retranslateUi(Form)

QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self,Form):

_translate =QtCore.QCoreApplication.translate

Form.setWindowTitle(_translate("Form","摘要算法"))

self.label.setText(_translate("Form","需要摘要的字符串"))

self.label_2.setText(_translate("Form","摘要算法"))

self.comboBox.setItemText(0,_translate("Form","md5"))

self.comboBox.setItemText(1,_translate("Form","sha1"))

self.comboBox.setItemText(2,_translate("Form","sha1"))

self.comboBox.setItemText(3,_translate("Form","sha224"))

self.comboBox.setItemText(4,_translate("Form","sha256"))

self.comboBox.setItemText(5,_translate("Form","sha384"))

self.comboBox.setItemText(6,_translate("Form","sha512"))

self.comboBox.setItemText(7,_translate("Form","sha3_224"))

self.comboBox.setItemText(8,_translate("Form","sha3_256"))

self.comboBox.setItemText(9,_translate("Form","sha3_384"))

self.comboBox.setItemText(10,_translate("Form","sha3_512"))

self.pushButton.setText(_translate("Form","计算"))

self.groupBox.setTitle(_translate("Form","结果"))

self.label_3.setText(_translate("Form","编码"))

self.comboBox_2.setItemText(0,_translate("Form","UTF-8"))

self.comboBox_2.setItemText(1,_translate("Form","GBK"))

def jisuan(self):

zhaiya=self.comboBox.currentText()

bianma = self.comboBox_2.currentText()

string=self.plainTextEdit.toPlainText()

fun=sf[zhaiya]

sha=fun(string.encode(bianma))

zfc=sha.hexdigest()

self.plainTextEdit_2.setPlainText(zfc)

app = QtWidgets.QApplication(sys.argv)

mainWindow = QtWidgets.QMainWindow()

ui = Ui_Form()

ui.setupUi(mainWindow)

mainWindow.show()

sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值