PyQt5, Модальное окно отображается лиш на долю секунды

Есть два файла, one.py, two.py первый файл отображает простое окно с кнопкой. Кнопка вызывает функцию, которая в свою очередь использует второй файл чтобы заполнить модальное окно.

Но второе окно отображается лишь на секунду (при том что содержание правильное) и закрывается.

Почему оно самопроизвольно закрывается?

one.py:

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QPushButton

import two

app = QApplication(sys.argv)


def show_list():
    md_wind = QWidget()
    md_wind.setWindowModality(Qt.WindowModal)
    list = two.foo()
    md_wind.setLayout(list)
    md_wind.show()

window = QWidget()
gl = QGridLayout()
btn = QPushButton('modality')
btn.clicked.connect(show_list)
gl.addWidget(btn, 0, 0)
window.setLayout(gl)

window.show()
sys.exit(app.exec())

файл two.py:

from PyQt5.QtWidgets import QGridLayout, QLabel


def foo():
    gl = QGridLayout()
    for i in range(5):
        gl.addWidget(QLabel(str(i)), i, 0)
        gl.addWidget(QLabel(str(i+1)), i, 1)
    return gl

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

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

я бы рекомендовал вам реализацию с использованием ООП:

one.py

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QPushButton
import two

class WindowMain(QWidget):
    def __init__(self):
        super().__init__()
        
        btn = QPushButton('modality')
        btn.clicked.connect(self.show_window_2)
        
        gl = QGridLayout(self)
        gl.addWidget(btn, 0, 0)

    def show_window_2(self):
        self.window_2 = two.foo()
        self.window_2.show()
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = WindowMain()
    w.resize(640, 570) 
    w.show()
    sys.exit(app.exec_())

two.py

from PyQt5.QtWidgets import QGridLayout, QLabel, QWidget
from PyQt5.QtCore import Qt


def foo():
    md_wind = QWidget()                                
    md_wind.setWindowModality(Qt.WindowModal)          
    gl = QGridLayout(md_wind)
    for i in range(5):
        gl.addWidget(QLabel(str(i)), i, 0)
        gl.addWidget(QLabel(str(i+1)), i, 1)
    return md_wind 

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

→ Ссылка