Заменить главное окно всплывающим

Пишу проект на PyQt5. Сейчас у меня сделано так, что при нажатии на кнопку открывается всплывающее окно, поверх главного.

Мне необходимо сделать, чтобы когда открывалось всплывающее окно, главное окно закрывалось, то есть по сути всплывающее окно становилось главным.

Я не знаю как это реализовать. Методы close(), и deleteLater() закрывают оба окна.

Код прилагаю. Всем заранее спасибо за помощь.

from PyQt5.QtWidgets import *
from PyQt5 import QtCore

class Window(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        button1 = QPushButton(self)
        button1.clicked.connect(self.handleNewWindow)

    def handleNewWindow(self):
        window1 = QMainWindow(self)
        window1.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        window1.setWindowTitle(self.tr('New Window'))
        window1.setGeometry(450, 200, 800, 600)
        window1.show()

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.setGeometry(450,200,800,600)
    window.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

Не наследуйте объект self.window1 от класса Window.

Сделайте объект self.window1 атрибутом класса.

Добавьте self.hide()

main.py

from PyQt5.QtWidgets import *
from PyQt5 import QtCore


class Window(QMainWindow):
    def __init__(self):
        super().__init__() 
        
        button1 = QPushButton(self)
        button1.clicked.connect(self.handleNewWindow)

    def handleNewWindow(self): 
#       vvvv!                     v!
        self.window1 = QMainWindow()                          # + self.window1
        self.window1.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        self.window1.setWindowTitle(self.tr('New Window'))
        self.window1.resize(450, 200)
        self.window1.show()
        self.hide()                                            # +++
        

if __name__ == '__main__':
    import sys
    
    app = QApplication(sys.argv)
    window = Window()
    window.setGeometry(450, 200, 800, 600)
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка