Заменить главное окно всплывающим
Пишу проект на 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_())
