需要的環境爲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", "加密"))
點此下載源碼
PYQT5+python3.6+QT編寫一個帶ui的加密解密小程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.