【发布时间】:2019-06-20 09:37:32
【问题描述】:
我想展示一个不提供任何交互的无框模态对话框,甚至不提供关闭对话框的功能。我们的想法是打开对话框以显示一条长时间操作正在进行的消息警告,运行该操作,而不是关闭对话框。
qt 文档似乎表明可以在不执行其事件循环的情况下显示模式对话框: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()
【问题讨论】: