You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中QStackedWidget与多QMainWindow通信跳转实现咨询

PyQt5多窗口交互实现方案

实现逻辑说明

  • 先补全各文件缺失的导入依赖,修复原代码的缩进错误
  • 主窗口MainWindow新增公开方法控制QStackedWidget切换,子窗口通过持有主窗口实例直接调用该方法即可
  • 以下默认主窗口中的QStacked控件objectName为stackedWidget,索引0为第一个Stacked页、索引1为第二个Stacked页,如果你是两个独立的Stacked窗口,可自行把切换逻辑改为窗口实例化显示逻辑即可

各文件修改后代码

main.py

from PyQt5 import QtWidgets, QtCore
from mainmenu import MainWindow

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())
from PyQt5 import QtWidgets
from ManageEmployee import EmployeeWindow
# 替换为你自己的ChartWindow对应导入路径
from ChartWindow import ChartWindow
# 导入你通过Qt Designer生成的主窗口UI类
from ui_mainwindow import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # 初始化默认显示堆叠控件第一页
        self.ui.stackedWidget.setCurrentIndex(0)

        self.ui.Reg_Emp_Button.clicked.connect(self.manage_reg_Employees)
        self.ui.Report_Button.clicked.connect(self.Employee_Report)
        # 绑定第一个堆叠页里的按钮切换到第二页的信号
        self.ui.first_page_btn.clicked.connect(lambda: self.ui.stackedWidget.setCurrentIndex(1))

    def switch_to_first_stacked(self):
        # 供子窗口调用,切换到第一个堆叠页并显示主窗口
        self.ui.stackedWidget.setCurrentIndex(0)
        self.show()

    def manage_reg_Employees(self):
        self.hide()
        self.employeeWindow = EmployeeWindow(self)
        self.employeeWindow.show()

    def Employee_Report(self):
        self.hide()
        self.chartWindow = ChartWindow(self)
        self.chartWindow.show()

ManageEmployee.py

from PyQt5 import QtWidgets
# 导入你通过Qt Designer生成的员工窗口UI类
from ui_employee import Ui_MainWindow

class EmployeeWindow(QtWidgets.QMainWindow):
    def __init__(self, mainMenu):
        super(EmployeeWindow, self).__init__()
        self.mainMenu = mainMenu
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.Back_Button.clicked.connect(self.Back_To_MainMenu)
        self.ui.Add_Employee_Button_2.clicked.connect(self.Add_New_Employee)

    def Back_To_MainMenu(self):
        self.hide()
        self.mainMenu.show()

    def Add_New_Employee(self):
        # 点击按钮隐藏当前子窗口,触发主窗口显示第一个堆叠页
        self.hide()
        self.mainMenu.switch_to_first_stacked()

适配说明

如果你说的两个QStackedWidget是独立的窗口而非同一堆叠控件的页,只需将switch_to_first_stacked方法替换为对应堆叠窗口的实例化、显示逻辑即可,和现有子窗口的调用逻辑完全一致。

内容的提问来源于stack exchange,提问作者Razor64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:45:04