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()
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()
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)
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() )
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)
def minimumSize(self): w = self.geometry().width() h = self.doLayout(QtCore.QRect(0, 0, w, 0), True) return QtCore.QSize(w, h)
def heightForWidth(self, width): height = self.doLayout(QtCore.QRect(0, 0, width, 0), True) return height
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()