Я хотел бы показать безрамочный модальный диалог, который не обеспечивает никакого взаимодействия, даже не возможность закрыть диалог. Идея состоит в том, чтобы открыть диалоговое окно для отображения сообщения с предупреждением о продолжающейся операции, запустить эту операцию, а затем закрыть диалоговое окно.
Qt doc, похоже, указывает на то, что можно отобразить модальное диалоговое окно без выполнения его цикла событий: https://doc.qt.io/qt-5/qdialog.html#modal-dialogs
Но когда я делаю это, диалог никогда не отображается должным образом на экране. Я получаю черный виджет, и его ярлыки остаются невидимыми.
Это моя попытка:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ModalInfoDialog(QDialog):
"""
Frameless modal dialog with no interaction
"""
def __init__(self, text1="Loading project",
text2="", parent=None):
super().__init__(parent)
self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)
self.setModal(True)
self.setStyleSheet(
"""
QDialog {
background-color: white;
border: none;
}
""")
layout = QVBoxLayout(self)
self.setLayout(layout)
firstLine = QLabel(text1)
secondLine = QLabel(text2)
layout.addWidget(firstLine)
layout.addWidget(secondLine)
import time
app = QApplication([])
d = ModalInfoDialog("haha!", "huh?")
d.show()
QApplication.processEvents() # does not help
time.sleep(3)
d.close()