这是我在执行长操作(例如 HTTP 请求)时经常在我的不同脚本中使用的一个 sn-p。这只是一个基本的纺车,几秒钟后就会消失。但是你也可以使用信号和槽来隐藏它。
import math, sys
from PyQt4.QtCore import Qt, QTimer
from PyQt4.QtGui import *
class Overlay(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
palette = QPalette(self.palette())
palette.setColor(palette.Background, Qt.transparent)
self.setPalette(palette)
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127)))
painter.setPen(QPen(Qt.NoPen))
for i in range(6):
if (self.counter / 5) % 6 == i:
painter.setBrush(QBrush(QColor(127 + (self.counter % 5)*32, 127, 127)))
else:
painter.setBrush(QBrush(QColor(127, 127, 127)))
painter.drawEllipse(
self.width()/2 + 30 * math.cos(2 * math.pi * i / 6.0) - 10,
self.height()/2 + 30 * math.sin(2 * math.pi * i / 6.0) - 10,
20, 20)
painter.end()
def showEvent(self, event):
self.timer = self.startTimer(50)
self.counter = 0
def timerEvent(self, event):
self.counter += 1
self.update()
if self.counter == 60:
self.killTimer(self.timer)
self.hide()
class MainWindow(QMainWindow):
def __init__(self, parent = None):
QMainWindow.__init__(self, parent)
widget = QWidget(self)
self.editor = QTextEdit()
self.editor.setPlainText("0123456789"*100)
layout = QGridLayout(widget)
layout.addWidget(self.editor, 0, 0, 1, 3)
button = QPushButton("Wait")
layout.addWidget(button, 1, 1, 1, 1)
self.setCentralWidget(widget)
self.overlay = Overlay(self.centralWidget())
self.overlay.hide()
button.clicked.connect(self.overlay.show)
def resizeEvent(self, event):
self.overlay.resize(event.size())
event.accept()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
由于您没有提供任何代码,因此我无法对其进行调整以满足您的需求。
另外,这里是source of the snippet。
这个wiki上有很多有趣的sn-ps:Python.org wiki