我只想弹出一个窗体遮罩,遮住主窗体,显示一个正在保存中
时间: 2024-09-26 16:13:44 浏览: 36
弹出一个遮罩层有正在加载效果的文字
在PyQt5中,你可以创建一个简单的窗口作为遮罩,并在需要时显示它来提示用户操作正在进行。通常我们会使用`QDialog`或者`QWidget`结合`setWindowModality`方法来实现这样的效果。以下是一个示例:
```python
from PyQt5.QtWidgets import QDialog, QApplication, QVBoxLayout
from PyQt5.QtGui import QPainter, QColor, QPixmap
from PyQt5.QtCore import Qt
class MaskDialog(QDialog):
def __init__(self, parent=None):
super(MaskDialog, self).__init__(parent)
self.setWindowFlag(Qt.WindowStaysOnTopHint) # 确保遮罩始终在最顶层
self.setAttribute(Qt.WA_TranslucentBackground) # 设置半透明背景
self.setWindowTitle('正在保存...')
layout = QVBoxLayout()
pixmap = QPixmap('path_to_your_loading_icon') # 替换为你实际的加载图标路径
painter = QPainter(pixmap)
painter.fillRect(pixmap.rect(), QColor(0, 0, 0, 80)) # 添加黑色背景
painter.end()
self.label = QLabel(self)
self.label.setPixmap(pixmap)
layout.addWidget(self.label)
self.setLayout(layout)
# 主程序
def show_mask(parent):
mask_dialog = MaskDialog(parent)
mask_dialog.show()
# 在这里执行你的长时间操作,比如文件保存
# 当操作完成时,可以隐藏遮罩,如 mask_dialog.close()
if __name__ == "__main__":
app = QApplication([])
main_window = QMainWindow() # 或者任何你有主窗体的地方
show_mask(main_window)
app.exec_()
```
在这个例子中,`MaskDialog`窗口会始终悬浮在主窗口之上,并有一个加载图标来指示操作正在进行。
阅读全文