Исчезает окно QDialog (PyQt5)

Простая программа, добавляющая строку в таблицу нажатием кнопки. Проблема заключается в том, что диалоговое окно QDialog показывается всего на долю секунды.

Мне нужно, чтобы оно отображалось до закрытия (мной). Подскажите что я делаю не так?

import sys
from random import random

from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTableView, QMessageBox


def show_changes(num):
    msb = QMessageBox(0, 'value', 'new value - ' + str(num) + ' added.')
    msb.show()
    sml.appendRow([QStandardItem('value'), QStandardItem(str(num))])


def randomiz():
    rand_num = round(random()*10)
    show_changes(rand_num)

app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
button = QPushButton('Add')
button.clicked.connect(randomiz)
tabl = QTableView()
sml = QStandardItemModel()
sml.appendRow([QStandardItem('value'), QStandardItem('0')])
tabl.setModel(sml)
layout.addWidget(button)
layout.addWidget(tabl)
window.setLayout(layout)
window.resize(400,300)
window.show()
sys.exit(app.exec_())

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

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

Замените msb.show() на msb.exec_()

import sys
from random import random

from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTableView, QMessageBox


def show_changes(num):
    msb = QMessageBox(0, 'value', 'new value - ' + str(num) + ' added.')
#    msb.show()
    msb.exec_()                                                              # <---
    sml.appendRow([QStandardItem('value'), QStandardItem(str(num))])


def randomiz():
    rand_num = round(random()*10)
    show_changes(rand_num)


app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
button = QPushButton('Add')
button.clicked.connect(randomiz)
tabl = QTableView()
sml = QStandardItemModel()
sml.appendRow([QStandardItem('value'), QStandardItem('0')])
tabl.setModel(sml)
layout.addWidget(button)
layout.addWidget(tabl)
window.setLayout(layout)
window.resize(400,300)
window.show()
sys.exit(app.exec_())

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

→ Ссылка
Автор решения: Артур

Попробуйте дописать в функции show_changes:

self.msb = QMessageBox(<ваши аргументы>) 
self.msb.show()
→ Ссылка