我们今天这一篇,就来讲解这一长串代码。
from PyQt5.QtWidgets import QWidget, QLabel, QComboBox, QApplication,QLineEdit,QPushButton
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
import sys,os,shutil,sip
class Example(QWidget):
def __init__(self):
super().__init__()
self.settings()
def settings(self):
self.combo = QComboBox(self)
self.combo.addItem("")
self.combo.addItem("摩尔码加密")
self.combo.addItem("倒置加密")
self.combo.move(150,10)
self.combo.activated[str].connect(self.remember)
self.say = QLabel(self)
self.say.setText(' ')
self.say.setFont(QFont('黑体',20))
self.say.move(90,100)
self.choice = QLabel(self)
self.choice.setText('请选择加密方式:')
self.choice.setFont(QFont('黑体',12))
self.choice.move(15, 12.5)
self.info = QLineEdit(self)
self.info.setPlaceholderText('请输入加密内容')
self.info.move(15,50)
self.yes = QPushButton('确定',self)
self.yes.move(200,150)
self.yes.clicked.connect(self.yes_)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('密码器')
self.show()
def remember(self, text):
self.unit = text
def yes_(self):
try:
if self.unit == '摩尔码加密':
dict1 = {'a': '.-', 'b': '-...', 'c': '-.-.', 'd': '-.', 'e': '.',
'f': '..-.', 'g': '--.', 'h': '....', 'i': '..', 'j': '.---',
'k': '-.-', 'l': '.-..', 'm': '--', 'n': '-.', 'o': '---',
'p': '.--.', 'q': '--.-', 'r': '.-.', 's': '...', 't': '-',
'u': '..-', 'v': '...-', 'w': '.--', 'x': '-..-', 'y': '-.--', 'z': '--..',
'0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.'}
ls = list(self.info.text())
keyword_ls = []
for i in range(len(ls)):
keyword_ls.append(dict1[ls[i]])
keyword = ' '.join(keyword_ls)
if '生成密码目录' not in os.listdir('./'):
os.mkdir('生成密码目录')
else:
shutil.rmtree('./生成密码目录')
os.mkdir('./生成密码目录')
where = open('./摩尔码加密内容.txt', 'w')
where.write(keyword)
self.say.setText('录入成功')
where.close()
if self.unit == '倒置加密':
ls = list(self.info.text())
ls.reverse()
if '生成密码目录' not in os.listdir('./'):
os.mkdir('生成密码目录')
else:
shutil.rmtree('./生成密码目录')
os.mkdir('./生成密码目录')
where = open('./生成密码目录/倒置加密内容.txt', 'w')
where.writelines(ls)
self.say.setText('录入成功')
where.close()
except:
self.say.setText('录入失败')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
首先解包,你们可能看这个代码觉得很怪,没办法,复制过来就这样。大家可以修改一下。然后我们创建类这些的没问题吧。settings的那一段,有一个知识点,就是下拉选框。这个东西我在Gui教程里会说,所以这里大家就看一下吧。大概意思就是把你选择的东西记录下来,用QComboBox创建。朋友们可以先去学习一下,或者等到我出下拉选框的教程时再回头看看。
设置标签的没问题吧。至于为什么要空的,这个其实你可以改改,毕竟这只是一个框架。这个remeber函数就是记录你下拉选框的选择。因为下拉选框绑定后会把你选择的内容赋值到绑定代码的参数中。但是这个text又只能在这个方法中用,所以需要用self.来记录。其实这有更好的方法,不过我为了编的快一些,所以有些冗余。大家可以自行修改。呵呵
下面的yes_中,首先使用异常处理,因为这里面有打开文件,我不用with打开文件,是因为问题也有可能不出在文件打开,所以就用try+except。然后就是判断。
摩尔码加密里,首先有一个字典。表示摩尔码与字母数字的互换。
然后因为是每个字母/数字对应一串摩尔码。所以需要用list函数来转换,这样就是每一个字母/数字都为一项。大家不明白,可用print函数打印一下ls。
然后创建一个输入到文件里的列表(就是将字母/数字转换后的列表),循环的话大家自己分析(还是讲讲吧…):
首先,循环ls的长度,这个没问题吧。
然后给keyword_ls列表增加ls里的每一项对应的摩尔码。那该怎么增加呢?
ls[i]其实就是遍历列表,然后将ls[i]作为键,然后在dict1找到对应的值,也就是对应的摩尔码。最后加到keyword_ls的末尾。
然后将keyword_ls变为字符串,名字为keyword。其实可以用writelines写入列表(没试过,大家可以试试),但是我更喜欢转为字符串。可是在倒置加密的时候我就是写入列表(前后矛盾!!!)。不废话了,接下来是写入文件,这一段非常有用,我给大家复制过来:
if '生成密码目录' not in os.listdir('./'):
os.mkdir('生成密码目录')
else:
shutil.rmtree('./生成密码目录')
os.mkdir('./生成密码目录')
这一段是覆盖文件夹,因为os的mkdir如果已有文件,就会报错,所以用这个就可以判断有没有某个名字的文件夹。当然,你用异常处理也行。不过我喜欢用这个。
然后是写入文件,这个没问题吧。
倒置加密其实就是列表的reverse功能,然后就是写入文件了。
然后如果报错,就处理为‘录入失败’。接着就有结果了。大家如果还有什么加密方法,可以自己加上去哟!
好了,今天的讲解就到这里了。大家有疑惑可以在评论区问我,当然最好加我QQ:3418772261。那么我们下次再见喽,拜拜!