需要的环境为python3.6、pyqt5(建议直接安装Anaconda,因为安好python后自带pyqt5),还有QTcreator(用来写ui界面),还需要一个编辑器(sublime或者notepad++均可,我使用的是PyCharm,毕竟IDE用起来顺手)。使用到的工具就是如下图:
- 1、先做个ui界面
打开QT,新建一个项目,打开设计界面,可以看到很多控件直接可以拖拽到右面的界面上,在编辑界面中可以看到直接生成了ui代码。
![]()
上图是需要完成的ui,拖拽一下就可以完成
要注意在右侧对各个控件命好名字,能自己区分(请无视我的命名方法= =),后期函数调用时需要用到
完成后到项目所在目录下找到mainwindow.ui文件
在cmd中打开当前目录,使用命令将xml代码转换为python代码
pyuic5 -o a.py mainwindow.ui
- 2、打开pycharm添加其他代码
新建一个工程,在工程下建立一个包,然后会自动生成__init__.py,把上边的a.py拖入包中
代码# -*- coding: utf-8 -*- import re import sys from PyQt5 import QtCore, QtWidgets from a import Ui_MainWindow class MyForm(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.initUi() #绑定槽函数 def initUi(self): #每个按钮对应不同函数 self.ui.pushButton_1_Kaisa.clicked.connect(self.kaisaEncryption) self.ui.pushButton_2_Kaisa.clicked.connect(self.kaisaDecryption) self.ui.pushButton_1_Weiji.clicked.connect(self.weijiEncryption) self.ui.pushButton_2_Weiji.clicked.connect(self.weijiDecryption) self.ui.pushButton_1_fangshe.clicked.connect(self.fangsheEncryption) self.ui.pushButton_2_fangshe.clicked.connect(self.fangsheDecryption) self.ui.pushButton_1_peigen.clicked.connect(self.peigenEncryption) self.ui.pushButton_2_peigen.clicked.connect(self.peigenDecryption) def fangsheEncryption(self): text = self.ui.textEdit_Input.toPlainText() fa = int(self.ui.lineEdit_fa.text()) fb = int(self.ui.lineEdit_fb.text()) fm = int(self.ui.lineEdit_fm.text()) tlen = len(text) if text != '' and fm != 0: result = "" for i in range(0, tlen): result += chr((fa*(ord(text[i])-ord('a'))+fb)%fm+ord('a')) self.ui.textEdit_Output.setText(result) def fangsheDecryption(self): text = self.ui.textEdit_Input.toPlainText() fa = int(self.ui.lineEdit_fa.text()) fb2 = int(self.ui.lineEdit_fb.text()) fm2 = int(self.ui.lineEdit_fm.text()) fa2 = 0 for i in range(0, 100): if int((i*fm2+1)/fa)*fa%fm2 == 1: fa2 = int((i*fm2+1)/fa) break self.ui.lineEdit_fa_2.setText(str(fa2)) self.ui.lineEdit_fb_2.setText(str(fb2)) self.ui.lineEdit_fm_2.setText(str(fm2)) tlen = len(text) if text != '': result = "" for i in range(0, tlen): result += chr((fa2*((ord(text[i]) - ord('a')) - fb2)) % fm2+ord('a')) self.ui.textEdit_Output.setText(result) def peigenEncryption(self): text = self.ui.textEdit_Input.toPlainText() result = '' for i in text: result += '{0:05b}'.format(ord(i)-ord('a')) # self.ui.textEdit_Output.setText(result) res = '' for i in result: if i=='0': res+='A' else: res+='B' self.ui.textEdit_Output.setText(res) def peigenDecryption(self): text = self.ui.textEdit_Input.toPlainText() text = text.replace('A','0').replace('B','1') result = '' for i in range(0, len(text), 5): b = text[i : i+5] result += chr(int(b,2)+ord('a')) self.ui.textEdit_Output.setText(result) def weijiEncrypt(self, text, key): tlen = len(text) klen = len(key) result = "" for i in range(0, tlen): result += chr((ord(text[i]) + ord(key[i % klen]) - 2 * ord('a')) % 26 + ord('a')) return result def weijiDecrypt(self, text, key): tlen = len(text) klen = len(key) result = "" for i in range(0, tlen): result += chr((ord(text[i]) - ord(key[i % klen]) + 26) % 26 + ord('a')) return result def weijiEncryption(self): text = self.ui.textEdit_Input.toPlainText() key = self.ui.lineEdit.text() if text != '' and key != '': text2 = self.weijiEncrypt(text, key) self.ui.textEdit_Output.setText(text2) def weijiDecryption(self): text = self.ui.textEdit_Input.toPlainText() key = self.ui.lineEdit.text() if text != '' and key != '': text2 = self.weijiDecrypt(text, key) self.ui.textEdit_Output.setText(text2) def kaisaEncryption(self): text = self.ui.textEdit_Input.toPlainText() temp = self.ui.spinBox.text() if text != '': text2 = self.kaisaEncrypt(text, temp) self.ui.textEdit_Output.setText(text2) def kaisaEncrypt(self, text, temp): tlen = len(text) result = "" for i in range(0, tlen): result += chr((ord(text[i]) - ord('a') + int(temp)) % 26 + ord('a')) return result def kaisaDecryption(self): text = self.ui.textEdit_Input.toPlainText() temp = self.ui.spinBox.text() if text != '': text2 = self.kaisaDecrypt(text, temp) self.ui.textEdit_Output.setText(text2) def kaisaDecrypt(self, text, temp): tlen = len(text) result = "" for i in range(0, tlen): result += chr((ord(text[i]) - ord('a') - int(temp)+26) % 26 + ord('a')) return result if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) myapp = MyForm() myapp.show() sys.exit(app.exec_())
a.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'mainwindow.ui' # # Created by: PyQt5 UI code generator 5.6 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(521, 410) MainWindow.setFocusPolicy(QtCore.Qt.WheelFocus) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.label = QtWidgets.QLabel(self.centralWidget) self.label.setGeometry(QtCore.QRect(50, 10, 91, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralWidget) self.label_2.setGeometry(QtCore.QRect(200, 20, 71, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(12) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralWidget) self.label_3.setGeometry(QtCore.QRect(200, 190, 71, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(12) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralWidget) self.label_4.setGeometry(QtCore.QRect(20, 30, 51, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_4.setFont(font) self.label_4.setObjectName("label_4") self.spinBox = QtWidgets.QSpinBox(self.centralWidget) self.spinBox.setGeometry(QtCore.QRect(20, 50, 42, 22)) self.spinBox.setObjectName("spinBox") self.textEdit_Input = QtWidgets.QTextEdit(self.centralWidget) self.textEdit_Input.setGeometry(QtCore.QRect(200, 50, 291, 111)) font = QtGui.QFont() font.setFamily("隶书") font.setPointSize(12) self.textEdit_Input.setFont(font) self.textEdit_Input.setFocusPolicy(QtCore.Qt.StrongFocus) self.textEdit_Input.setObjectName("textEdit_Input") self.textEdit_Output = QtWidgets.QTextEdit(self.centralWidget) self.textEdit_Output.setGeometry(QtCore.QRect(200, 220, 291, 111)) font = QtGui.QFont() font.setFamily("隶书") font.setPointSize(12) self.textEdit_Output.setFont(font) self.textEdit_Output.setObjectName("textEdit_Output") self.pushButton_1_Kaisa = QtWidgets.QPushButton(self.centralWidget) self.pushButton_1_Kaisa.setGeometry(QtCore.QRect(70, 50, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_1_Kaisa.setFont(font) self.pushButton_1_Kaisa.setObjectName("pushButton_1_Kaisa") self.pushButton_2_Kaisa = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2_Kaisa.setGeometry(QtCore.QRect(120, 50, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_2_Kaisa.setFont(font) self.pushButton_2_Kaisa.setObjectName("pushButton_2_Kaisa") self.label_5 = QtWidgets.QLabel(self.centralWidget) self.label_5.setGeometry(QtCore.QRect(30, 80, 131, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label_5.setFont(font) self.label_5.setObjectName("label_5") self.pushButton_1_Weiji = QtWidgets.QPushButton(self.centralWidget) self.pushButton_1_Weiji.setGeometry(QtCore.QRect(70, 150, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_1_Weiji.setFont(font) self.pushButton_1_Weiji.setObjectName("pushButton_1_Weiji") self.label_6 = QtWidgets.QLabel(self.centralWidget) self.label_6.setGeometry(QtCore.QRect(20, 100, 51, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_6.setFont(font) self.label_6.setObjectName("label_6") self.pushButton_2_Weiji = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2_Weiji.setGeometry(QtCore.QRect(120, 150, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_2_Weiji.setFont(font) self.pushButton_2_Weiji.setObjectName("pushButton_2_Weiji") self.lineEdit = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit.setGeometry(QtCore.QRect(20, 120, 141, 21)) font = QtGui.QFont() font.setFamily("隶书") font.setPointSize(12) self.lineEdit.setFont(font) self.lineEdit.setObjectName("lineEdit") self.label_7 = QtWidgets.QLabel(self.centralWidget) self.label_7.setGeometry(QtCore.QRect(50, 180, 81, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label_7.setFont(font) self.label_7.setObjectName("label_7") self.label_8 = QtWidgets.QLabel(self.centralWidget) self.label_8.setGeometry(QtCore.QRect(20, 200, 151, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_8.setFont(font) self.label_8.setObjectName("label_8") self.label_9 = QtWidgets.QLabel(self.centralWidget) self.label_9.setGeometry(QtCore.QRect(10, 220, 41, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_9.setFont(font) self.label_9.setObjectName("label_9") self.lineEdit_fa = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fa.setGeometry(QtCore.QRect(50, 220, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fa.setFont(font) self.lineEdit_fa.setObjectName("lineEdit_fa") self.label_10 = QtWidgets.QLabel(self.centralWidget) self.label_10.setGeometry(QtCore.QRect(80, 220, 16, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_10.setFont(font) self.label_10.setObjectName("label_10") self.lineEdit_fb = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fb.setGeometry(QtCore.QRect(100, 220, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fb.setFont(font) self.lineEdit_fb.setObjectName("lineEdit_fb") self.label_11 = QtWidgets.QLabel(self.centralWidget) self.label_11.setGeometry(QtCore.QRect(130, 220, 41, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_11.setFont(font) self.label_11.setObjectName("label_11") self.lineEdit_fm = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fm.setGeometry(QtCore.QRect(160, 220, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fm.setFont(font) self.lineEdit_fm.setObjectName("lineEdit_fm") self.pushButton_2_fangshe = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2_fangshe.setGeometry(QtCore.QRect(120, 280, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_2_fangshe.setFont(font) self.pushButton_2_fangshe.setObjectName("pushButton_2_fangshe") self.pushButton_1_fangshe = QtWidgets.QPushButton(self.centralWidget) self.pushButton_1_fangshe.setGeometry(QtCore.QRect(70, 280, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_1_fangshe.setFont(font) self.pushButton_1_fangshe.setObjectName("pushButton_1_fangshe") self.label_12 = QtWidgets.QLabel(self.centralWidget) self.label_12.setGeometry(QtCore.QRect(10, 250, 41, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_12.setFont(font) self.label_12.setObjectName("label_12") self.label_13 = QtWidgets.QLabel(self.centralWidget) self.label_13.setGeometry(QtCore.QRect(70, 250, 21, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_13.setFont(font) self.label_13.setObjectName("label_13") self.lineEdit_fa_2 = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fa_2.setGeometry(QtCore.QRect(50, 250, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fa_2.setFont(font) self.lineEdit_fa_2.setObjectName("lineEdit_fa_2") self.lineEdit_fb_2 = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fb_2.setGeometry(QtCore.QRect(90, 250, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fb_2.setFont(font) self.lineEdit_fb_2.setObjectName("lineEdit_fb_2") self.lineEdit_fm_2 = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_fm_2.setGeometry(QtCore.QRect(150, 250, 21, 20)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.lineEdit_fm_2.setFont(font) self.lineEdit_fm_2.setObjectName("lineEdit_fm_2") self.label_14 = QtWidgets.QLabel(self.centralWidget) self.label_14.setGeometry(QtCore.QRect(120, 250, 41, 21)) font = QtGui.QFont() font.setFamily("楷体") self.label_14.setFont(font) self.label_14.setObjectName("label_14") self.label_15 = QtWidgets.QLabel(self.centralWidget) self.label_15.setGeometry(QtCore.QRect(50, 310, 81, 21)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label_15.setFont(font) self.label_15.setObjectName("label_15") self.pushButton_2_peigen = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2_peigen.setGeometry(QtCore.QRect(120, 340, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_2_peigen.setFont(font) self.pushButton_2_peigen.setObjectName("pushButton_2_peigen") self.pushButton_1_peigen = QtWidgets.QPushButton(self.centralWidget) self.pushButton_1_peigen.setGeometry(QtCore.QRect(70, 340, 41, 23)) font = QtGui.QFont() font.setFamily("楷体") font.setPointSize(10) self.pushButton_1_peigen.setFont(font) self.pushButton_1_peigen.setObjectName("pushButton_1_peigen") MainWindow.setCentralWidget(self.centralWidget) self.mainToolBar = QtWidgets.QToolBar(MainWindow) self.mainToolBar.setObjectName("mainToolBar") MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar) self.statusBar = QtWidgets.QStatusBar(MainWindow) self.statusBar.setObjectName("statusBar") MainWindow.setStatusBar(self.statusBar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "加解密")) self.label.setText(_translate("MainWindow", "凯撒密码")) self.label_2.setText(_translate("MainWindow", "输入文本")) self.label_3.setText(_translate("MainWindow", "输出文本")) self.label_4.setText(_translate("MainWindow", "位移量")) self.pushButton_1_Kaisa.setText(_translate("MainWindow", "加密")) self.pushButton_2_Kaisa.setText(_translate("MainWindow", "解密")) self.label_5.setText(_translate("MainWindow", "维吉尼亚密码")) self.pushButton_1_Weiji.setText(_translate("MainWindow", "加密")) self.label_6.setText(_translate("MainWindow", "密钥")) self.pushButton_2_Weiji.setText(_translate("MainWindow", "解密")) self.label_7.setText(_translate("MainWindow", "仿射密码")) self.label_8.setText(_translate("MainWindow", "加解密函数(参数均为整数)")) self.label_9.setText(_translate("MainWindow", "E(x)=(")) self.label_10.setText(_translate("MainWindow", "x+")) self.label_11.setText(_translate("MainWindow", ")mod")) self.pushButton_2_fangshe.setText(_translate("MainWindow", "解密")) self.pushButton_1_fangshe.setText(_translate("MainWindow", "加密")) self.label_12.setText(_translate("MainWindow", "D(x)=")) self.label_13.setText(_translate("MainWindow", "(x-")) self.label_14.setText(_translate("MainWindow", ")mod")) self.label_15.setText(_translate("MainWindow", "培根密码")) self.pushButton_2_peigen.setText(_translate("MainWindow", "解密")) self.pushButton_1_peigen.setText(_translate("MainWindow", "加密"))
点此下载源码