Ejemplo n.º 1
0
class TextWidget(QtGui.QGraphicsWidget):
    faded_opacity = .8
    padding = 3
    bg_color = QtGui.QColor(0,0,0,0)

    def __init__(self, timeout_seconds=0):
        super(TextWidget, self).__init__()

        self.setOpacity(self.faded_opacity)
        self.opaciter = OpacityAnimation(self)
        
        self.background = QtGui.QGraphicsRectItem(self)
        self.background.setBrush(QtGui.QBrush(self.bg_color))
        self.background.setPen(QtGui.QPen(QtGui.QColor(0,0,0,0)))

        self.item = TextItem(self)

        self._timer = None
        self.timeout_seconds = timeout_seconds


    def sizeHint(self, which, constraint=None):

        #if which == QtCore.Qt.PreferredSize:
        if True:
            rect = self.item.boundingRect()
            size = QtCore.QSizeF(rect.width(), rect.height())
        else:
            size = super(TextWidget, self).sizeHint(which, constraint)
        return size

    def setHtml(self, html):
        of = self.padding
        self.item.setHtml(html)
        rect = self.item.boundingRect()
        self.background.setRect(rect)
        self.updateGeometry()

    def show(self):
        if not self.opaciter.fadeTo(self.faded_opacity):
            self.opaciter.stop()
            self.opaciter.fadeTo(self.faded_opacity)
            
        if self.timeout_seconds:
            self.timer = QtCore.QTimer(self)
            self.timer.timeout.connect(self._hide)
            self.timer.setSingleShot(True)
            self.timer.start(self.timeout_seconds * 1000)

    def hide(self):
        if not self.opaciter.fadeTo(0):
            self.opaciter.stop()
            self.opaciter.fadeTo(0)