コード例 #1
0
    def paintEvent(self, event):
        '''Paint widget.'''
        painter = QtGui.QPainter()
        painter.begin(self)

        try:
            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            area = QtCore.QRect(0, 0,
                                painter.device().width(),
                                painter.device().height())
            center = QtCore.QPointF(area.width() / 2.0, area.height() / 2.0)

            # Draw in a normalised centered box.
            normalisedEdge = 100.0
            normalisedArea = QtCore.QRectF(-(normalisedEdge / 2.0),
                                           -(normalisedEdge / 2.0),
                                           normalisedEdge, normalisedEdge)

            shortestSide = min(area.width(), area.height())
            painter.translate(center)
            painter.scale(shortestSide / normalisedEdge,
                          shortestSide / normalisedEdge)

            # Draw logo.
            svgRenderer = QtSvg.QSvgRenderer()
            svgRenderer.load(self._logo)
            logoMargin = 30.0
            logoArea = normalisedArea.adjusted(logoMargin, logoMargin,
                                               -logoMargin, -logoMargin)
            svgRenderer.render(painter, logoArea)

            # Draw spinner at current spin angle.
            pen = QtGui.QPen()
            penWidth = 5.0
            pen.setWidth(penWidth)

            gradient = QtGui.QConicalGradient(QtCore.QPoint(0, 0),
                                              -self._spinnerAngle)

            gradient.setColorAt(0.95, QtCore.Qt.transparent)
            gradient.setColorAt(0, self._spinnerColor)

            brush = QtGui.QBrush(gradient)
            pen.setBrush(brush)
            painter.setPen(pen)

            spinnerArea = QtCore.QRectF(
                normalisedArea.top() + (penWidth / 2.0),
                normalisedArea.left() + (penWidth / 2.0),
                normalisedArea.width() - penWidth,
                normalisedArea.height() - penWidth)

            painter.drawArc(
                spinnerArea,
                0,  # Start angle.
                360 * 16  # Span angle.
            )

        finally:
            painter.end()
コード例 #2
0
    def doLayout(self, rect, testOnly=False):
        x = rect.x()
        y = rect.y()
        lineHeight = 0

        for item in self.itemList:
            wid = item.widget()

            spaceX = self.spacing() + wid.style().layoutSpacing(
                QtWidgets.QSizePolicy.PushButton,
                QtWidgets.QSizePolicy.PushButton, QtCore.Qt.Horizontal)

            spaceY = self.spacing() + wid.style().layoutSpacing(
                QtWidgets.QSizePolicy.PushButton,
                QtWidgets.QSizePolicy.PushButton, QtCore.Qt.Vertical)

            nextX = x + item.sizeHint().width() + spaceX
            if nextX - spaceX > rect.right() and lineHeight > 0:
                x = rect.x()
                y = y + lineHeight + spaceY
                nextX = x + item.sizeHint().width() + spaceX
                lineHeight = 0

            if not testOnly:
                item.setGeometry(
                    QtCore.QRect(QtCore.QPoint(x, y), item.sizeHint()))

            x = nextX
            lineHeight = max(lineHeight, item.sizeHint().height())

        return y + lineHeight - rect.y()
コード例 #3
0
    def resizeEvent(self, event):
        wrapper = self.findChild(QtWidgets.QWidget)
        flow = wrapper.findChild(FlowLayout)

        if wrapper and flow:
            width = self.viewport().width()
            height = flow.heightForWidth(width)
            size = QtCore.QSize(width, height)
            point = self.viewport().rect().topLeft()
            flow.setGeometry(QtCore.QRect(point, size))
            self.viewport().update()

        super(ResizeScrollArea, self).resizeEvent(event)
コード例 #4
0
    def resizeEvent(self, event):
        '''Handle resize *event*.

        Position action buttons.

        '''
        contentRegion = self.rect()

        widgetGeometry = QtCore.QRect(
            QtCore.QPoint(
                contentRegion.width() - self._iconRegion.width(),
                (contentRegion.height() - self._iconRegion.height()) / 2
            ),
            self._iconSize
        )

        for button in self._actionButtons:
            button.setGeometry(widgetGeometry)
            widgetGeometry.moveLeft(
                widgetGeometry.left() - self._iconRegion.width()
            )
コード例 #5
0
    def paintEvent(self, event):
        '''Handle paint *event*.'''
        painter = QtWidgets.QPainter(self)

        # Note: isDown should ideally use the 'active' state, but in most styles
        # this has no proper feedback.
        state = QtGui.QIcon.Disabled
        if self.isEnabled():
            state = QtGui.QIcon.Normal
            if self.isDown():
                state = QtGui.QIcon.Selected

        iconPixmap = self.icon().pixmap(
            QtCore.QSize(self.iconSize, self.iconSize),
            state,
            QtGui.QIcon.Off
        )

        iconRegion = QtCore.QRect(
            0, 0, iconPixmap.width(), iconPixmap.height()
        )
        iconRegion.moveCenter(self.rect().center())

        painter.drawPixmap(iconRegion, iconPixmap)
コード例 #6
0
 def minimumSize(self):
     w = self.geometry().width()
     h = self.doLayout(QtCore.QRect(0, 0, w, 0), True)
     return QtCore.QSize(w, h)
コード例 #7
0
 def heightForWidth(self, width):
     height = self.doLayout(QtCore.QRect(0, 0, width, 0), True)
     return height
コード例 #8
0
    def paintEvent(self, event):
        '''Paint widget.'''
        painter = QtGui.QPainter()
        painter.begin(self)

        try:
            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            area = QtCore.QRect(
                0, 0, painter.device().width(), painter.device().height()
            )
            center = QtCore.QPointF(
                area.width() / 2.0,
                area.height() / 2.0
            )

            # Draw in a normalised centered box.
            normalisedEdge = 100.0
            normalisedArea = QtCore.QRectF(
                -(normalisedEdge / 2.0), -(normalisedEdge / 2.0),
                normalisedEdge, normalisedEdge
            )

            shortestSide = min(area.width(), area.height())
            painter.translate(center)
            painter.scale(
                shortestSide / normalisedEdge,
                shortestSide / normalisedEdge
            )

            # Draw spinner at current spin angle.
            pen = QtGui.QPen()
            penWidth = 8.0
            pen.setWidth(penWidth)
            pen.setColor(self._spinnerColor)
            pen.setCapStyle(QtCore.Qt.RoundCap)

            gradient = QtGui.QConicalGradient(
                QtCore.QPoint(0, 0),
                -self._spinnerAngle
            )
            gradient.setColorAt(0.95, self._spinnerColor)
            gradient.setColorAt(0, self._spinnerColor)

            brush = QtGui.QBrush(gradient)
            pen.setBrush(brush)
            painter.setPen(pen)

            spinnerArea = QtCore.QRectF(
                normalisedArea.top() + (penWidth / 2.0),
                normalisedArea.left() + (penWidth / 2.0),
                normalisedArea.width() - penWidth,
                normalisedArea.height() - penWidth
            )

            painter.drawArc(
                spinnerArea,
                -self._spinnerAngle * 16,  # Start angle.
                250 * 16  # Span angle.
            )

        finally:
            painter.end()