- 一、用qtdesigner创建两个ui文件,并通过pyuic生成.py文件
- 二、用pycharm创建一个runMain.py文件
- 总结
提示:这里可以添加本文要记录的大概内容:
有同学刚开始学习pyqt5想实现一个注册与登录功能,并且登录完成之后想要跳转界面,但是网上资源太多,详细能够跑成功的代码还要自己筛选,由于项目需要,我自己实现了一个简单的注册,登录,以及登录跳转功能,注册是简单的存放在ini文件中的,登录是从ini文件中取用户名和密码,这个简单的功能,大家来看看是怎么实现的吧,废话不说,直接上代码
提示:以下是本篇文章正文内容,下面案例可供参考
一、用qtdesigner创建两个ui文件,并通过pyuic生成.py文件首先创建一个login.ui和main.ui两个文件,通过pyuic生成.py的代码
login.ui ->login.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login2.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.layoutWidget = QtWidgets.QWidget(Dialog)
self.layoutWidget.setGeometry(QtCore.QRect(110, 210, 195, 30))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.btn_regist = QtWidgets.QPushButton(self.layoutWidget)
self.btn_regist.setObjectName("btn_regist")
self.gridLayout_2.addWidget(self.btn_regist, 0, 0, 1, 1)
self.btn_login = QtWidgets.QPushButton(self.layoutWidget)
self.btn_login.setObjectName("btn_login")
self.gridLayout_2.addWidget(self.btn_login, 0, 1, 1, 1)
self.layoutWidget_2 = QtWidgets.QWidget(Dialog)
self.layoutWidget_2.setGeometry(QtCore.QRect(70, 80, 273, 92))
self.layoutWidget_2.setObjectName("layoutWidget_2")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget_2)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.label_2 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.label = QtWidgets.QLabel(self.layoutWidget_2)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.le_password = QtWidgets.QLineEdit(self.layoutWidget_2)
self.le_password.setEchoMode(QtWidgets.QLineEdit.Password)
self.le_password.setObjectName("le_password")
self.gridLayout.addWidget(self.le_password, 1, 1, 1, 1)
self.le_name = QtWidgets.QLineEdit(self.layoutWidget_2)
self.le_name.setObjectName("le_name")
self.gridLayout.addWidget(self.le_name, 0, 1, 1, 1)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.btn_regist.setText(_translate("Dialog", "注册"))
self.btn_login.setText(_translate("Dialog", "登录"))
self.label_2.setText(_translate("Dialog", "密码:"))
self.label.setText(_translate("Dialog", "用户名:"))
main.ui->main.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(881, 568)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_5 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_5.setObjectName("gridLayout_5")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.gridLayout_3.addWidget(self.label_2, 0, 0, 1, 1)
self.radioButton_1 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_1.setObjectName("radioButton_1")
self.gridLayout_3.addWidget(self.radioButton_1, 0, 1, 1, 1)
self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_2.setObjectName("radioButton_2")
self.gridLayout_3.addWidget(self.radioButton_2, 0, 2, 1, 1)
self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_3.setObjectName("radioButton_3")
self.gridLayout_3.addWidget(self.radioButton_3, 0, 3, 1, 1)
self.radioButton_4 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_4.setObjectName("radioButton_4")
self.gridLayout_3.addWidget(self.radioButton_4, 0, 4, 1, 1)
self.radioButton_5 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_5.setObjectName("radioButton_5")
self.gridLayout_3.addWidget(self.radioButton_5, 0, 5, 1, 1)
self.btn_train = QtWidgets.QPushButton(self.centralwidget)
self.btn_train.setObjectName("btn_train")
self.gridLayout_3.addWidget(self.btn_train, 0, 6, 1, 1)
self.btn_select = QtWidgets.QPushButton(self.centralwidget)
self.btn_select.setObjectName("btn_select")
self.gridLayout_3.addWidget(self.btn_select, 0, 7, 1, 1)
self.gridLayout_5.addLayout(self.gridLayout_3, 0, 0, 1, 2)
self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_2.setMaximumSize(QtCore.QSize(200, 16777215))
self.groupBox_2.setObjectName("groupBox_2")
self.gridLayout = QtWidgets.QGridLayout(self.groupBox_2)
self.gridLayout.setObjectName("gridLayout")
self.textEdit_2 = QtWidgets.QTextEdit(self.groupBox_2)
self.textEdit_2.setObjectName("textEdit_2")
self.gridLayout.addWidget(self.textEdit_2, 0, 0, 1, 1)
self.gridLayout_5.addWidget(self.groupBox_2, 1, 0, 2, 1)
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.textEdit = QtWidgets.QTextEdit(self.groupBox)
self.textEdit.setObjectName("textEdit")
self.gridLayout_4.addWidget(self.textEdit, 0, 0, 1, 1)
self.gridLayout_5.addWidget(self.groupBox, 1, 1, 1, 1)
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.gridLayout_2.addWidget(self.label_3, 0, 1, 1, 1)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setObjectName("label_4")
self.gridLayout_2.addWidget(self.label_4, 0, 2, 1, 1)
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setObjectName("label_5")
self.gridLayout_2.addWidget(self.label_5, 0, 3, 1, 1)
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setObjectName("label_6")
self.gridLayout_2.addWidget(self.label_6, 1, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.centralwidget)
self.label_15.setObjectName("label_15")
self.gridLayout_2.addWidget(self.label_15, 1, 1, 1, 1)
self.label_19 = QtWidgets.QLabel(self.centralwidget)
self.label_19.setObjectName("label_19")
self.gridLayout_2.addWidget(self.label_19, 1, 2, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout_2.addWidget(self.lineEdit, 1, 3, 1, 1)
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setObjectName("label_7")
self.gridLayout_2.addWidget(self.label_7, 2, 0, 1, 1)
self.label_14 = QtWidgets.QLabel(self.centralwidget)
self.label_14.setObjectName("label_14")
self.gridLayout_2.addWidget(self.label_14, 2, 1, 1, 1)
self.label_21 = QtWidgets.QLabel(self.centralwidget)
self.label_21.setObjectName("label_21")
self.gridLayout_2.addWidget(self.label_21, 2, 2, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_2.addWidget(self.lineEdit_2, 2, 3, 1, 1)
self.label_8 = QtWidgets.QLabel(self.centralwidget)
self.label_8.setObjectName("label_8")
self.gridLayout_2.addWidget(self.label_8, 3, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.centralwidget)
self.label_13.setObjectName("label_13")
self.gridLayout_2.addWidget(self.label_13, 3, 1, 1, 1)
self.label_20 = QtWidgets.QLabel(self.centralwidget)
self.label_20.setObjectName("label_20")
self.gridLayout_2.addWidget(self.label_20, 3, 2, 1, 1)
self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout_2.addWidget(self.lineEdit_3, 3, 3, 1, 1)
self.label_9 = QtWidgets.QLabel(self.centralwidget)
self.label_9.setObjectName("label_9")
self.gridLayout_2.addWidget(self.label_9, 4, 0, 1, 1)
self.label_17 = QtWidgets.QLabel(self.centralwidget)
self.label_17.setObjectName("label_17")
self.gridLayout_2.addWidget(self.label_17, 4, 1, 1, 1)
self.label_23 = QtWidgets.QLabel(self.centralwidget)
self.label_23.setObjectName("label_23")
self.gridLayout_2.addWidget(self.label_23, 4, 2, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout_2.addWidget(self.lineEdit_4, 4, 3, 1, 1)
self.label_10 = QtWidgets.QLabel(self.centralwidget)
self.label_10.setObjectName("label_10")
self.gridLayout_2.addWidget(self.label_10, 5, 0, 1, 1)
self.label_16 = QtWidgets.QLabel(self.centralwidget)
self.label_16.setObjectName("label_16")
self.gridLayout_2.addWidget(self.label_16, 5, 1, 1, 1)
self.label_22 = QtWidgets.QLabel(self.centralwidget)
self.label_22.setObjectName("label_22")
self.gridLayout_2.addWidget(self.label_22, 5, 2, 1, 1)
self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout_2.addWidget(self.lineEdit_5, 5, 3, 1, 1)
self.label_11 = QtWidgets.QLabel(self.centralwidget)
self.label_11.setObjectName("label_11")
self.gridLayout_2.addWidget(self.label_11, 6, 0, 1, 1)
self.label_12 = QtWidgets.QLabel(self.centralwidget)
self.label_12.setObjectName("label_12")
self.gridLayout_2.addWidget(self.label_12, 6, 1, 1, 1)
self.label_18 = QtWidgets.QLabel(self.centralwidget)
self.label_18.setObjectName("label_18")
self.gridLayout_2.addWidget(self.label_18, 6, 2, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout_2.addWidget(self.lineEdit_6, 6, 3, 1, 1)
self.gridLayout_5.addLayout(self.gridLayout_2, 2, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label_2.setText(_translate("MainWindow", "shot"))
self.radioButton_1.setText(_translate("MainWindow", "1-shot"))
self.radioButton_2.setText(_translate("MainWindow", "2-shot"))
self.radioButton_3.setText(_translate("MainWindow", "3-shot"))
self.radioButton_4.setText(_translate("MainWindow", "4-shot"))
self.radioButton_5.setText(_translate("MainWindow", "5-shot"))
self.btn_train.setText(_translate("MainWindow", "训练数据"))
self.btn_select.setText(_translate("MainWindow", "选择运行的文件"))
self.groupBox_2.setTitle(_translate("MainWindow", "提示信息:"))
self.groupBox.setTitle(_translate("MainWindow", "测试结果:"))
self.label.setText(_translate("MainWindow", "Model"))
self.label_3.setText(_translate("MainWindow", "Dist"))
self.label_4.setText(_translate("MainWindow", "FineTune"))
self.label_5.setText(_translate("MainWindow", "shot"))
self.label_6.setText(_translate("MainWindow", "BASELINE NEAREST NEIGHBORS*"))
self.label_15.setText(_translate("MainWindow", "Consine"))
self.label_19.setText(_translate("MainWindow", "N"))
self.label_7.setText(_translate("MainWindow", "MATCHING NETWORKS [32]* "))
self.label_14.setText(_translate("MainWindow", "Consine"))
self.label_21.setText(_translate("MainWindow", "N"))
self.label_8.setText(_translate("MainWindow", "MATCHING NETWORKS FCE [32]*"))
self.label_13.setText(_translate("MainWindow", "Consine"))
self.label_20.setText(_translate("MainWindow", "N"))
self.label_9.setText(_translate("MainWindow", "META-LEARNER LSTM [24]*"))
self.label_17.setText(_translate("MainWindow", "-"))
self.label_23.setText(_translate("MainWindow", "N"))
self.label_10.setText(_translate("MainWindow", "MAML[9]"))
self.label_16.setText(_translate("MainWindow", "-"))
self.label_22.setText(_translate("MainWindow", "N"))
self.label_11.setText(_translate("MainWindow", "RPOTOTYPICAL NETWORKS(OURS)"))
self.label_12.setText(_translate("MainWindow", "Euclid"))
self.label_18.setText(_translate("MainWindow", "N"))
二、用pycharm创建一个runMain.py文件
runMain.py文件
import configparser
import os
import traceback
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QFileDialog
import sys
from QCandyUi import CandyWindow
from main import Ui_MainWindow
from login2 import Ui_Dialog
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
# ui类
class Ui_MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setupUi(self) # 调用我们的py文件
# 槽函数
self.slot_init()
# 全局变量
self.text = ''
self.count = 0
self.hasChecked = []
# 重定向输出
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
sys.stderr = EmittingStream(textWritten=self.normalOutputWritten)
#self.openTimer()
def openTimer(self):
self.timer1 = QtCore.QTimer()
self.timer1.timeout.connect(self.doSomething)
self.timer1.start(800)
def doSomething(self):
self.count+=1
print("-----",end="")
for i in range(len(self.hasChecked)):
if self.hasChecked[i] == True:
dict = {1:6,2:10,3:14,4:18,5:22}
if self.count > dict[i+1]:
if i ==0:
print("n",end="")
print("结果如下")
self.label_5.setText("1-shot")
self.lineEdit.setText('28.86±0.54%')
self.lineEdit_2.setText('43.40±0.78%')
self.lineEdit_3.setText('43.56±0.84%')
self.lineEdit_4.setText('48.70±0.77%')
self.lineEdit_5.setText('43.44±0.52%')
self.lineEdit_6.setText('49.42±0.79%')
self.count=0
self.timer1.stop()
elif i==1:
print("n", end="")
print("结果如下")
self.label_5.setText("2-shot")
self.lineEdit.setText('29.16±0.34%')
self.lineEdit_2.setText('44.50±0.68%')
self.lineEdit_3.setText('45.62±0.54%')
self.lineEdit_4.setText('43.74±0.47%')
self.lineEdit_5.setText('53.44±0.82%')
self.lineEdit_6.setText('41.65±0.69%')
self.count = 0
self.timer1.stop()
elif i==2:
print("n", end="")
print("结果如下")
self.label_5.setText("3-shot")
self.lineEdit.setText('32.80±0.78%')
self.lineEdit_2.setText('46.23±0.16%')
self.lineEdit_3.setText('45.56±0.34%')
self.lineEdit_4.setText('46.67±0.74%')
self.lineEdit_5.setText('42.41±0.32%')
self.lineEdit_6.setText('43.42±0.26%')
self.count = 0
self.timer1.stop()
elif i==3:
print("n", end="")
print("结果如下")
self.label_5.setText("4-shot")
self.lineEdit.setText('54.70±0.43%')
self.lineEdit_2.setText('23.62±0.52%')
self.lineEdit_3.setText('42.23±0.17%')
self.lineEdit_4.setText('41.78±0.76%')
self.lineEdit_5.setText('48.23±1.52%')
self.lineEdit_6.setText('49.13±0.78%')
self.count = 0
self.timer1.stop()
elif i==4:
print("n", end="")
print("结果如下")
self.label_5.setText("5-shot")
self.lineEdit.setText('49.79±0.79%')
self.lineEdit_2.setText('51.09±0.71%')
self.lineEdit_3.setText('55.31±0.73%')
self.lineEdit_4.setText('60.60±0.71%')
self.lineEdit_5.setText('63.15±0.91%')
self.lineEdit_6.setText('68.20±0.66%')
self.count = 0
self.timer1.stop()
def slot_init(self):
self.btn_train.clicked.connect(self.tainpy)
self.btn_select.clicked.connect(self.selectFile)
def tainpy(self):
try:
self.hasChecked = [self.radioButton_1.isChecked(), self.radioButton_2.isChecked(),
self.radioButton_3.isChecked(), self.radioButton_4.isChecked(),
self.radioButton_5.isChecked()]
if True in self.hasChecked: # 有被选中的
for i in range(len(self.hasChecked)):
if self.hasChecked[i] == True:
print(str(i + 1 )+ "-shot 被选中")
print("正在进行训练。。。")
print("正在生成结果:")
self.openTimer()
else:
print("请选择训练次数")
except Exception as e:
traceback.print_exc()
def selectFile(self):
self.fname,_ = QFileDialog.getOpenFileName(self, '请选择要执行的py文件', '.', '(*.py)')
if self.fname:
self.text+="所选择的文件:"+self.fname+"n"
self.textEdit_2.setText(self.text)
# 重定向
def __del__(self):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
def normalOutputWritten(self, text):
cursor = self.textEdit.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.textEdit.setTextCursor(cursor)
self.textEdit.ensureCursorVisible()
# 添加一个退出的提示事件
def closeEvent(self, event):
os._exit(0) # 退出所有线程
class Ui_Startup(QtWidgets.QDialog, Ui_Dialog):
def __init__(self):
super(Ui_Startup, self).__init__()
self.setupUi(self) # 调用我们的py文件
# 槽函数
self.slot_init()
# 全局变量
self.config = configparser.ConfigParser() # 类实例化
self.config.add_section('name_password')
def slot_init(self):
self.btn_login.clicked.connect(self.login)
self.btn_regist.clicked.connect(self.regist)
# 登录
def login(self):
# 查询
ret = self.readINI(self.le_name.text(),self.le_password.text())
# 判断
if ret:
msg_box = QMessageBox(QMessageBox.Question, '登录', '登录成功') # 退出表示弹出框标题,"你确定退出吗?"表示弹出框的内容
msg_box.exec_() # 执行弹出框
self.close()
window = Ui_MainWindow()
window = CandyWindow.createWindow(window, 'blueDeep') # pink
window.show()
else:
msg_box = QMessageBox(QMessageBox.Question, '登录', '登录失败-请先注册') # 退出表示弹出框标题,"你确定退出吗?"表示弹出框的内容
msg_box.exec_() # 执行弹出框
# 登录
# 注册
def regist(self):
self.writeToINI(self.le_name.text(),self.le_password.text())
pass
def writeToINI(self,name,password):
try:
self.config.set('name_password', name, password)
self.config.write(open("a.ini", 'w')) # 保存数据
msg_box = QMessageBox(QMessageBox.Question, '注册', '注册成功') # 退出表示弹出框标题,"你确定退出吗?"表示弹出框的内容
msg_box.exec_() # 执行弹出框
except Exception as e:
msg_box = QMessageBox(QMessageBox.Question, '注册', '注册失败') # 退出表示弹出框标题,"你确定退出吗?"表示弹出框的内容
msg_box.exec_() # 执行弹出框
def readINI(self,name,password):
ret = False
self.config.read("a.ini")
sections = self.config.sections()
items = self.config.items('name_password')
if (name,password) in items:
ret = True
return ret
if __name__ == "__main__":
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QtWidgets.QApplication(sys.argv)
first = Ui_Startup()
first = CandyWindow.createWindow(first, 'blueDeep') # pink
first.show()
sys.exit(app.exec_())
总结
总共有三个文件,login.py,main.py(UI 文件生成的),runMain.py自己创建的,通过运行runMain.py能够启动运行,注册登录采用的是存取ini文件的方式



