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_())
mainMenu.py
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
相关产品推荐
相关产品推荐

