Как показать диалог сам по себе (без родительского виджета) в PyQt? - PullRequest
0 голосов
/ 15 марта 2020

В контексте родительского класса, такого как главное окно, легко вывести на экран диалоговое окно, подобное окну сообщения:

QMessageBox.information(self, "Title", "Here is your informative message")

Это выдает сообщение, которое я хочу, с родителем, являющимся * 1004. * виджет уже открыт. Но что, если я хочу показать такой диалог в середине Python программы сам по себе (скажем, сказать, что их программа закончилась или что-то еще), без вызова родительского класса?

Я попробовал следующее, и диалоговое окно показало, но когда я нажимаю OK, моя система зависает на несколько секунд, сообщение не печатается, и мое ядро ​​Python перезагружается (без сообщения об ошибке):

import sys
from PyQt5.QtWidgets import QApplication, QMessageBox

app = QApplication(sys.argv)
mess = QMessageBox()
mess.setText("Here is your message")
mess.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
returnValue = mess.exec_()
if returnValue == QMessageBox.Ok:
    print("Clicked OK!")
elif returnValue == QMessageBox.Cancel:
    print("Cancelled?!")
print("\n\nNow we are done")

Когда я нажимаю кнопку Отмена, кажется, работает нормально. Я не уверен, какие правила Qt я нарушаю здесь. Я мог бы просто свернуть свое собственное маленькое всплывающее окно, используя QWidget Полагаю,

Я нахожусь в pyqt5 / python 3.7, работающем в Spyder / i Python. Когда я запускаю прямо из командной строки, это на самом деле, кажется, работает, так что это может быть проблема I Python или Spyder.

...