登录窗口UI
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_Login(object):
def setupUi(self, Login):
Login.setObjectName("Login")
Login.resize(400, 300)
self.formLayoutWidget = QtWidgets.QWidget(Login)
self.formLayoutWidget.setGeometry(QtCore.QRect(80, 100, 231, 51))
self.formLayoutWidget.setObjectName("formLayoutWidget")
self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget)
self.formLayout_2.setContentsMargins(0, 0, 0, 0)
self.formLayout_2.setObjectName("formLayout_2")
self.label = QtWidgets.QLabel(self.formLayoutWidget)
self.label.setObjectName("label")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_2.setObjectName("label_2")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.lineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit.setObjectName("lineEdit")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
self.lineEdit_2 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
self.horizontalLayoutWidget = QtWidgets.QWidget(Login)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(110, 150, 201, 25))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.pushButton = QtWidgets.QPushButton(Login)
self.pushButton.setGeometry(QtCore.QRect(0, 270, 96, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Login)
self.pushButton.clicked.connect(Login.register)
QtCore.QMetaObject.connectSlotsByName(Login)
def retranslateUi(self, Login):
_translate = QtCore.QCoreApplication.translate
Login.setWindowTitle(_translate("Login", "Form"))
self.label.setText(_translate("Login", "账号"))
self.label_2.setText(_translate("Login", "密码"))
self.pushButton_2.setText(_translate("Login", "登录"))
self.pushButton.setText(_translate("Login", "注册账号"))
注册窗口UI
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'register.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_Register(object):
def setupUi(self, Register):
Register.setObjectName("Register")
Register.resize(400, 300)
self.formLayoutWidget = QtWidgets.QWidget(Register)
self.formLayoutWidget.setGeometry(QtCore.QRect(90, 90, 211, 81))
self.formLayoutWidget.setObjectName("formLayoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(self.formLayoutWidget)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
self.lineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit.setObjectName("lineEdit")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
self.label_3 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.lineEdit_3 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_3.setObjectName("lineEdit_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit_3)
self.horizontalLayoutWidget = QtWidgets.QWidget(Register)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(120, 170, 181, 25))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout.addWidget(self.pushButton_2)
self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.pushButton_3 = QtWidgets.QPushButton(Register)
self.pushButton_3.setGeometry(QtCore.QRect(10, 270, 75, 23))
self.pushButton_3.setObjectName("pushButton_3")
self.retranslateUi(Register)
self.pushButton_3.clicked.connect(Register.login)
QtCore.QMetaObject.connectSlotsByName(Register)
def retranslateUi(self, Register):
_translate = QtCore.QCoreApplication.translate
Register.setWindowTitle(_translate("Register", "Form"))
self.label.setText(_translate("Register", "账号"))
self.label_2.setText(_translate("Register", "密码"))
self.label_3.setText(_translate("Register", "重复"))
self.pushButton_2.setText(_translate("Register", "提交"))
self.pushButton.setText(_translate("Register", "重置"))
self.pushButton_3.setText(_translate("Register", "登录"))
路由组件
from PyQt5.QtCore import pyqtSignal
'''窗口路由组件'''
class QRoute(object):
# 信号构建器:每个参与路由的窗口类都必须继承该类。
class RouteSignal(object):
signal = pyqtSignal(type, tuple)
def __init__(self, home, data) -> None:
super(QRoute, self).__init__()
self.handle(home, data)
# 路由处理器
def handle(self, clazz, data) -> None:
clazz_instance = clazz(data)
clazz_instance.show()
clazz_instance.signal.connect(lambda to_clazz, data: (clazz_instance.close(), self.handle(to_clazz, data)))
main文件
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from QRoute import QRoute
from login import Ui_Login
from register import Ui_Register
class LoginWindow(QWidget, Ui_Login, QRoute.RouteSignal):
def __init__(self, data):
print(data)
super(LoginWindow, self).__init__()
self.setupUi(self)
def register(self, data):
self.signal.emit(RegisterWindow, (data, '准备注册'))
class RegisterWindow(QWidget, Ui_Register, QRoute.RouteSignal):
def __init__(self, data):
print(data)
super(RegisterWindow, self).__init__()
self.setupUi(self)
def login(self, data):
self.signal.emit(LoginWindow, (data, '准备登陆'))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QRoute(LoginWindow, None)
sys.exit(app.exec_())