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

PyQt5多窗口下实现MainWindow前置显示的方法

解决PyQt5多窗口下主窗口前置显示的问题

要实现Window2中按钮点击后将主窗口(Window实例)前置显示,核心是让Window2获取到主窗口的引用,再调用窗口前置的相关方法。以下是修改后的完整代码:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, 
                              QLabel)

class Window2(QMainWindow):
    def __init__(self, main_window):  # 接收主窗口实例
        super().__init__()
        self.main_window = main_window  # 保存主窗口引用
        self.setWindowTitle("Window 2")
        self.pushButton = QPushButton("Back to window1", self)
        self.pushButton.clicked.connect(self.window1) 

    def window1(self):
        # 激活并前置主窗口
        self.main_window.activateWindow()
        self.main_window.raise_()


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.title = "First Window"
        self.top = 100
        self.left = 100
        self.width = 680
        self.height = 500

        self.pushButton = QPushButton("Go to window 2 ", self)
        self.pushButton.move(275, 200)
            
        self.label = QLabel("window 1", self)
        self.label.move(285, 175)
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        self.pushButton.clicked.connect(self.window2)             

    def window2(self):
        # 创建Window2时传入主窗口实例
        self.w = Window2(self)
        self.w.show()
        

def main(): 
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    exit(app.exec_())

if __name__=='__main__':
    main()

关键修改说明:

  • 传递主窗口引用:在Window类的window2方法中,创建Window2实例时将self(主窗口自身)作为参数传入。
  • 保存主窗口引用:Window2的__init__方法接收主窗口实例并保存为self.main_window,确保按钮回调能访问主窗口。
  • 前置主窗口:在Window2的window1方法中,activateWindow()用于激活主窗口,raise_()用于将窗口置于所有窗口顶层,两者结合可确保主窗口成功前置。

如果不想通过传递实例的方式,也可以通过QApplication.instance().topLevelWidgets()遍历所有顶层窗口,找到Window类的实例后调用前置方法,但传递实例的方式更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:56:05