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
