QtDesigner配置两个窗口结合上一篇的QRoute路由组件实现窗口的无缝切换

登录窗口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_())

结尾、扫一扫下方微信名片即可+博主徽信哦 ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓  ↓↓↓

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值