class ErrorLabel(QWidget): WARNING, ERROR = range(2) def __init__(self, parent): QWidget.__init__(self, parent) self.ticks = 5 self.elapsedTicks = 0 self.lastSeverity = None self.icon_label = QLabel() self.icon_label.setGeometry(0, 0, 48, 48) self.message_edit = QTextEdit() self.message_edit.setReadOnly(True) self.message_edit.setFrameStyle(QFrame.NoFrame) palette = self.message_edit.palette() palette.setBrush(QPalette.Base, QBrush()) self.message_edit.setPalette(palette) self.time_bar = QProgressBar() self.time_bar.setOrientation(Qt.Vertical) self.time_bar.setMaximum(self.ticks) self.time_bar.setTextVisible(False) self.pauseButton = QPushButton(QIcon(QPixmap(":/icons/images/pause.png")), "") self.pauseButton.setFixedSize(32, 32) self.connect(self.pauseButton, SIGNAL('clicked()'), self.stopTimer) self.stopButton = QPushButton(QIcon(QPixmap(":/icons/images/stop.png")), "") self.stopButton.setFixedSize(32, 32) self.connect(self.stopButton, SIGNAL('clicked()'), self.closeWidget) self.layout = QGridLayout(self) self.layout.addWidget(self.time_bar, 0, 0, 2, 1) self.layout.addWidget(self.icon_label, 0, 1, 2, 1) self.layout.addWidget(self.message_edit, 0, 2, 2, 1) self.layout.addWidget(self.pauseButton, 0, 3) self.layout.addWidget(self.stopButton, 1, 3) self.layout.setColumnStretch(2, 1) self.setAutoFillBackground(True) self.timer = QTimer() self.connect(self.timer, SIGNAL("timeout()"), self.decrementTime) def stopTimer(self): self.timer.stop() self.pauseButton.setEnabled(False) def closeWidget(self): self.timer.stop() QWidget.hide(self) @pyqtSlot() def decrementTime(self): if self.elapsedTicks == self.ticks: self.hide() self.timer.stop() else: self.elapsedTicks += 1 self.time_bar.setValue(self.ticks - self.elapsedTicks) def updatePosition(self): self.setGeometry(0, self.parent().height() - self.height(), self.width(), self.height()) def setSize(self, w, h): self.setGeometry(0, self.parent().height() - h, w, h) def setErrorMessage(self, msg): self.lastSeverity = self.ERROR self.icon_label.setPixmap(QApplication.style().standardIcon(QStyle.SP_MessageBoxCritical).pixmap(48, 48)) self._setMessage(msg) def setWarningMessage(self, msg): self.lastSeverity = self.WARNING self.icon_label.setPixmap(QApplication.style().standardIcon(QStyle.SP_MessageBoxWarning).pixmap(48, 48)) self._setMessage(msg) def _setMessage(self, msg): self.message_edit.setText(msg) self.updatePosition() self.elapsedTicks = 0 self.time_bar.setValue(self.ticks) self.timer.start(1000) self.pauseButton.setEnabled(True) self.show()