Как создать модальное окно в PyQt5?

Как мне создать второе окно, всплывающее по нажатию кнопки, установленной в главном окне?

После нажатия на кнопку, окно Modal появляется и тут же закрывается.
Если убрать комментарии, приложение перестанет работать вообще.

Что мне необходимо добавить в свой код, что окно не закрывалось и являлось модальным?

Пример, как пытался сделать я:

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget
import sys


class Main(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.initUI()

    def initUI(self):
        self.resize(500, 500)
        self.widget = QWidget()
        self.testBtn = QtWidgets.QPushButton(self.widget)
        self.testBtn.setText("Test")
        self.testBtn.clicked.connect(self.open)

        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.widget)
        self.setLayout(self.vbox)

    def open(self):
        app2 = Modal()
        app2.show()


class Modal(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        # self.setWindowModality(Qt.WindowModal) 
        # self.setModal(True)
        self.resize(200, 200)


if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    application = Main()
    application.show()

    sys.exit(app.exec_())

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

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

Ваш объект app2 удаляется сборщиком мусора, надо продлить ему жизнь, т.е. сделать атрибутом класса.

...
    def open(self):
        self.app2 = Modal()                                # +++ self
        self.app2.show()                                   # +++ self
...
→ Ссылка