目录
主要使用模块
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt, QCoreApplication
import qdarkstyle
from Ui_LoginWindow import Ui_LoginWindow
from Ui_MyWindow import Ui_MyWindow
from Ui_ModelWindow import Ui_ModelWindow
Ui_LoginWindow:一级界面布局
# 登录窗口程序
class LoginWindow(QtWidgets.QMainWindow, Ui_LoginWindow): # 定义一级界面
sig1_2 = QtCore.pyqtSignal() # 跳转到二级界面的信号
def __init__(self):
super(LoginWindow, self).__init__()
self.setupUi(self)
# 跳转到每个模块的命令按钮
self.Button1_2.clicked.connect(self.get_sig1_2) # 一级界面的登录按钮
self.Button1_2.clicked.connect(self.close) # 点击登录按钮则退出初始界面
self.Button1_over.clicked.connect(self.close) # 一级界面的退出按钮
# 接收信号
def get_sig1_2(self):
self.sig1_2.emit()
Ui_MyWindow:二级界面(主窗口)布局
# 主窗口程序
class MyWindow(QtWidgets.QMainWindow, Ui_MyWindow): # 定义二级界面
sig2_3 = QtCore.pyqtSignal() # 跳转到三级界面的信号
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
# 跳转到每个模块的菜单项
self.actionopen.triggered.connect(self.get_sig2_3) # 二级界面的菜单项
# 接收信号
def get_sig2_3(self):
self.sig2_3.emit()
Ui_ModelWindow:三级界面布局
# 三级窗口
class ModelWindow(QtWidgets.QMainWindow, Ui_ModelWindow): # 定义三级界面
def __init__(self):
super(ModelWindow, self).__init__()
self.setupUi(self)
两个控制器的设置
# 控制器:控制登录界面和主界面跳转
class ControllerOneToTwo:
def __init__(self):
self.Login = None
self.control_ = None
pass
# 登录窗口
def show_one(self):
self.Login = LoginWindow() # 一级
# self.Login.showMaximized()
self.Login.sig1_2.connect(self.set_sig1_2) # 链接槽函数
self.Login.show()
# 登录窗口(一级)跳转到主窗口(二级)
def set_sig1_2(self):
self.control_ = ControllerTwoToThree() # 更新
self.control_.show_my_win() # 二级
# 控制器:控制主界面和三级界面跳转
class ControllerTwoToThree:
def __init__(self):
self.my_win = None # 二级
self.md_win = None # 三级
pass
# 主窗口
def show_my_win(self):
self.my_win = MyWindow() # 二级
# self.my_win.showMaximized()
self.my_win.sig2_3.connect(self.show_md_win) # 链接槽函数
self.my_win.show()
# 三级窗口
def show_md_win(self):
self.md_win = ModelWindow() # 三级
# self.md_win.showMaximized() # 设置每个界面的默认最大化
self.md_win.Button3_2.clicked.connect(self.md_win.close) # 点击按钮二级转三级
self.md_win.Button3_2.clicked.connect(self.show_my_win)
self.my_win.close() # 关闭原页面
self.md_win.show()
学习参考
https://blog.csdn.net/weixin_37718724/article/details/134667197
完整代码
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt, QCoreApplication
import qdarkstyle
from Ui_LoginWindow import Ui_LoginWindow
from Ui_MyWindow import Ui_MyWindow
from Ui_ModelWindow import Ui_ModelWindow
qdarkstyle_sheet = qdarkstyle.load_stylesheet(qt_api='pyqt5')
# 登录窗口程序
class LoginWindow(QtWidgets.QMainWindow, Ui_LoginWindow): # 定义一级界面
sig1_2 = QtCore.pyqtSignal() # 跳转到二级界面的信号
def __init__(self):
super(LoginWindow, self).__init__()
self.setupUi(self)
# 跳转到每个模块的命令按钮
self.Button1_2.clicked.connect(self.get_sig1_2) # 一级界面的登录按钮
self.Button1_2.clicked.connect(self.close) # 点击登录按钮则退出初始界面
self.Button1_over.clicked.connect(self.close) # 一级界面的退出按钮
# 接收信号
def get_sig1_2(self):
self.sig1_2.emit()
# 主窗口程序
class MyWindow(QtWidgets.QMainWindow, Ui_MyWindow): # 定义二级界面
sig2_3 = QtCore.pyqtSignal() # 跳转到三级界面的信号
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
# 跳转到每个模块的菜单项
self.actionopen.triggered.connect(self.get_sig2_3) # 二级界面的菜单项
# 接收信号
def get_sig2_3(self):
self.sig2_3.emit()
# 三级窗口
class ModelWindow(QtWidgets.QMainWindow, Ui_ModelWindow): # 定义三级界面
def __init__(self):
super(ModelWindow, self).__init__()
self.setupUi(self)
# 控制器:控制登录界面和主界面跳转
class ControllerOneToTwo:
def __init__(self):
self.Login = None
self.control_ = None
pass
# 登录窗口
def show_one(self):
self.Login = LoginWindow() # 一级
# self.Login.showMaximized()
self.Login.sig1_2.connect(self.set_sig1_2) # 链接槽函数
self.Login.show()
# 登录窗口(一级)跳转到主窗口(二级)
def set_sig1_2(self):
self.control_ = ControllerTwoToThree() # 更新
self.control_.show_my_win() # 二级
# 控制器:控制主界面和三级界面跳转
class ControllerTwoToThree:
def __init__(self):
self.my_win = None # 二级
self.md_win = None # 三级
pass
# 主窗口
def show_my_win(self):
self.my_win = MyWindow() # 二级
# self.my_win.showMaximized()
self.my_win.sig2_3.connect(self.show_md_win) # 链接槽函数
self.my_win.show()
# 三级窗口
def show_md_win(self):
self.md_win = ModelWindow() # 三级
# self.md_win.showMaximized() # 设置每个界面的默认最大化
self.md_win.Button3_2.clicked.connect(self.md_win.close) # 点击按钮二级转三级
self.md_win.Button3_2.clicked.connect(self.show_my_win)
self.my_win.close() # 关闭原页面
self.md_win.show()
if __name__ == '__main__':
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
app.setStyleSheet(qdarkstyle_sheet)
control_ = ControllerOneToTwo() # 登录界面
control_.show_one() # 默认展示的是登录页面
sys.exit(app.exec_())