Исчезает окно 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()
