第一部分主要分为:
界面设计
登录界面代码:
ui_login.py
from PySide2 import QtCore, QtGui, QtWidgets
class Ui_Login(object):
def setupUi(self, Login):
Login.setObjectName("Login")
Login.resize(480, 320)
self.label = QtWidgets.QLabel(Login)
self.label.setGeometry(QtCore.QRect(10, 20, 451, 51))
font = QtGui.QFont()
font.setPointSize(16)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Login)
self.label_2.setGeometry(QtCore.QRect(10, 90, 141, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Login)
self.label_3.setGeometry(QtCore.QRect(10, 150, 141, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.lineEdit = QtWidgets.QLineEdit(Login)
self.lineEdit.setGeometry(QtCore.QRect(170, 90, 281, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Login)
self.lineEdit_2.setGeometry(QtCore.QRect(170, 150, 281, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit_2.setFont(font)
self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
self.lineEdit_2.setObjectName("lineEdit_2")
self.pushButton = QtWidgets.QPushButton(Login)
self.pushButton.setGeometry(QtCore.QRect(170, 230, 111, 61))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Login)
self.pushButton_2.setGeometry(QtCore.QRect(320, 230, 121, 61))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton_2.setFont(font)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../Downloads/register.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.pushButton_2.setIcon(icon)
self.pushButton_2.setObjectName("pushButton_2")
self.retranslateUi(Login)
QtCore.QMetaObject.connectSlotsByName(Login)
def retranslateUi(self, Login):
Login.setWindowTitle(QtWidgets.QApplication.translate("Login", "登录", None, -1))
self.label.setText(QtWidgets.QApplication.translate("Login", "欢迎使用,请登录", None, -1))
self.label_2.setText(QtWidgets.QApplication.translate("Login", "用户名:", None, -1))
self.label_3.setText(QtWidgets.QApplication.translate("Login", "密码:", None, -1))
self.pushButton.setText(QtWidgets.QApplication.translate("Login", "登录", None, -1))
self.pushButton_2.setText(QtWidgets.QApplication.translate("Login", "注册", None, -1))
注册界面代码:
ui_register.py
from PySide2 import QtCore, QtGui, QtWidgets
class Ui_Register(object):
def setupUi(self, Register):
Register.setObjectName("Register")
Register.resize(480, 360)
self.label = QtWidgets.QLabel(Register)
self.label.setGeometry(QtCore.QRect(30, 10, 421, 51))
font = QtGui.QFont()
font.setPointSize(16)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Register)
self.label_2.setGeometry(QtCore.QRect(10, 80, 161, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.lineEdit = QtWidgets.QLineEdit(Register)
self.lineEdit.setGeometry(QtCore.QRect(180, 90, 281, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.label_3 = QtWidgets.QLabel(Register)
self.label_3.setGeometry(QtCore.QRect(10, 130, 161, 61))
font = QtGui.QFont()
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.lineEdit_2 = QtWidgets.QLineEdit(Register)
self.lineEdit_2.setGeometry(QtCore.QRect(180, 140, 281, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit_2.setFont(font)
self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
self.lineEdit_2.setObjectName("lineEdit_2")
self.label_4 = QtWidgets.QLabel(Register)
self.label_4.setGeometry(QtCore.QRect(10, 180, 161, 61))
font = QtGui.QFont()
font.setPointSize(12)
self.label_4.setFont(font)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.lineEdit_3 = QtWidgets.QLineEdit(Register)
self.lineEdit_3.setGeometry(QtCore.QRect(180, 190, 281, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit_3.setFont(font)
self.lineEdit_3.setEchoMode(QtWidgets.QLineEdit.Password)
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Register)
self.pushButton.setGeometry(QtCore.QRect(180, 260, 131, 61))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Register)
QtCore.QMetaObject.connectSlotsByName(Register)
def retranslateUi(self, Register):
Register.setWindowTitle(QtWidgets.QApplication.translate("Register", "注册", None, -1))
self.label.setText(QtWidgets.QApplication.translate("Register", "欢迎使用,请注册", None, -1))
self.label_2.setText(QtWidgets.QApplication.translate("Register", "用户名:", None, -1))
self.label_3.setText(QtWidgets.QApplication.translate("Register", "密码:", None, -1))
self.label_4.setText(QtWidgets.QApplication.translate("Register", "确认密码:", None, -1))
self.pushButton.setText(QtWidgets.QApplication.translate("Register", "提交", None, -1))
首页界面代码:
ui_home.py
from PySide2 import QtCore, QtGui, QtWidgets
class Ui_Home(object):
def setupUi(self, Home):
Home.setObjectName("Home")
Home.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(Home)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(20, 20, 751, 51))
font = QtGui.QFont()
font.setPointSize(16)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(100, 110, 140, 131))
self.pushButton.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.pushButton.setIcon(icon)
self.pushButton.setIconSize(QtCore.QSize(141, 141))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(320, 110, 141, 141))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(560, 110, 141, 141))
self.pushButton_3.setObjectName("pushButton_3")
Home.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Home)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
Home.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Home)
self.statusbar.setObjectName("statusbar")
Home.setStatusBar(self.statusbar)
self.retranslateUi(Home)
QtCore.QMetaObject.connectSlotsByName(Home)
def retranslateUi(self, Home):
Home.setWindowTitle(QtWidgets.QApplication.translate("Home", "MainWindow", None, -1))
self.label.setText(QtWidgets.QApplication.translate("Home", "welcome ", None, -1))
self.pushButton_2.setText(QtWidgets.QApplication.translate("Home", "待更新", None, -1))
self.pushButton_3.setText(QtWidgets.QApplication.translate("Home", "待更新", None, -1))
完整主程序代码:
main.py
import sys
import json
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from ui_login import Ui_Login
from ui_home import Ui_Home
from ui_register import Ui_Register
class Test(QMainWindow, Ui_Home):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show_login_window()
self.login_window.pushButton_2.clicked.connect(self.show_register_window)
self.login_window.pushButton.clicked.connect(self.verify_login)
def show_login_window(self):
self.login_widget = QWidget()
self.login_window = Ui_Login()
self.login_window.setupUi(self.login_widget)
self.login_widget.show()
def show_register_window(self):
self.register_widget = QWidget()
self.register_window = Ui_Register()
self.register_window.setupUi(self.register_widget)
self.register_widget.show()
self.register_window.pushButton.clicked.connect(self.verify_register)
def verify_login(self):
with open('user.json', 'r') as f:
users = json.load(f)
self.name = self.login_window.lineEdit.text()
self.password = self.login_window.lineEdit_2.text()
for user in users:
if user['name'] == self.name and user['password'] == self.password:
QMessageBox.information(self,'提示','登录成功',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
self.login_widget.close()
self.show()
break
else:
QMessageBox.information(self, '提示', '账户或者密码错误,\n请重新登录', QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
self.login_window.lineEdit.setText('')
self.login_window.lineEdit_2.setText('')
def verify_register(self):
with open('user.json', 'r') as f:
users = json.load(f)
self.name = self.register_window.lineEdit.text()
self.password = self.register_window.lineEdit_2.text()
self.password2 = self.register_window.lineEdit_3.text()
for user in users:
if user['name'] == self.name:
QMessageBox.information(self, '提示', '该用户名已经存在,\n请重新输入', QMessageBox.Yes | QMessageBox.No,
QMessageBox.Yes)
break
else:
if self.password == self.password2:
with open('user.json', 'w') as f:
users.append({'id':len(users)+1,'name':f'{self.name}','password':f'{self.password}'})
json.dump(users,f)
QMessageBox.information(self, '提示', '注册成功', QMessageBox.Yes | QMessageBox.No,
QMessageBox.Yes)
self.register_widget.close()
else:
QMessageBox.information(self, '提示', '两次密码不一致,\n请重新输入密码', QMessageBox.Yes | QMessageBox.No,
QMessageBox.Yes)
self.password = self.register_window.lineEdit_2.setText('')
self.password2 = self.register_window.lineEdit_3.setText('')
if __name__ == "__main__":
app = QApplication(sys.argv)
test = Test()
# Qt主循环 和 程序退出
sys.exit(app.exec_())