Как закрыть все окна при закрытии одного?
Подскажите как закрыть все активные окна при закрытии MainWindow ?
import sys
from PyQt5 import QtWidgets
class Window1(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
label = QtWidgets.QLabel("Label 1")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
class Window2(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
label = QtWidgets.QLabel("Label 2")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
window1_button = QtWidgets.QPushButton("Window 1")
window2_button = QtWidgets.QPushButton("Window 2")
window_quit = QtWidgets.QPushButton("Close")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(window1_button)
layout.addWidget(window2_button)
layout.addWidget(window_quit)
self.setLayout(layout)
window1_button.clicked.connect(self.open_window1)
window2_button.clicked.connect(self.open_window2)
window_quit.clicked.connect(self.quit)
def open_window1(self):
window = Window1()
window.resize(300, 300)
window.show()
def open_window2(self):
window = Window2()
window.resize(300, 300)
window.show()
def quit(self):
QtWidgets.qApp.quit()
if __name__ == '__main__'
application = QtWidgets.QApplication([])
window = MainWindow()
window.resize(500, 500)
window.show()
sys.exit(application.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
При создании экземпляров дополнительных окон родитель должен быть MainWindow.
Но чтобы виджет стал окном при наличии родителя, установите флаг Qt.Window.
Попробуйте так:
import sys
from PyQt5 import QtWidgets, QtCore # + QtCore
class Window1(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window1, self).__init__(parent)
self.setWindowFlags(QtCore.Qt.Window) # +++ Qt.Window
label = QtWidgets.QLabel("Label 1")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
class Window2(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window2, self).__init__(parent)
self.setWindowFlags(QtCore.Qt.Window) # +++ Qt.Window
label = QtWidgets.QLabel("Label 2")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__()
window1_button = QtWidgets.QPushButton("Window 1")
window2_button = QtWidgets.QPushButton("Window 2")
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(window1_button)
layout.addWidget(window2_button)
window1_button.clicked.connect(self.open_window1)
window2_button.clicked.connect(self.open_window2)
def open_window1(self):
self.window = Window1(self) # +++ self
self.window.resize(300, 300)
self.window.show()
def open_window2(self):
window = Window2(self) # +++ self
window.resize(300, 300)
window.show()
if __name__ == '__main__':
application = QtWidgets.QApplication([])
window = MainWindow()
window.resize(500, 500)
window.show()
sys.exit(application.exec_())
