def __drawTrackLines(self, painter, start, end): # Draw only from pixel start to end painter.setPen(QtCore.Qt.DashLine) painter.setOpacity(0.3) # Draw horizontal lines # for track in range(0, self.numberoftracks + 1): # y = (track * 34) + 18 # painter.drawLine(start, y, end, y) for i, track in enumerate(self._tracks): track.draw(painter, start, end, i) # Draw vertical lines for x in range(start - (start % 100), end, 100): painter.drawLine(x, 20, x, self.height()) string = "{0}".format(int(round(x / self._scale))) boundtext = painter.boundingRect(QtCore.QRectF(), string) painter.drawText(x - boundtext.width() / 2, 15, string) if self._video_fps: string = "{0}".format( int(round((x / self._scale) * (1000.0 / self._video_fps)))) boundtext = painter.boundingRect(QtCore.QRectF(), string) painter.drawText(x - boundtext.width() / 2, 30, string) painter.setOpacity(1.0) for index, track in enumerate(self._tracks): track.drawLabels(painter, index)
def __draw_track_lines(self, painter, start, end): """ Draw the track lines. :param QPainter painter: Qt QPainter object. :param int start: Initial X coordinate pixel to paint. :param int end: Final X coordinate pixel to paint. """ # Draw only from pixel start to end painter.setPen(QtCore.Qt.DashLine) painter.setOpacity(0.3) for i, track in enumerate(self._tracks): track.draw(painter, start, end) # Draw vertical lines for x in range(start - (start % 100), end, 100): painter.drawLine(x, self.TOPTRACK_HEIGHT, x, self.height()) string = "{0}".format(int(round(x / self._scale))) boundtext = painter.boundingRect(QtCore.QRectF(), string) painter.drawText(x - boundtext.width() / 2, 15, string) if self._video_fps: string = "{0}".format( int(round((x / self._scale) * (1000.0 / self._video_fps)))) boundtext = painter.boundingRect(QtCore.QRectF(), string) painter.drawText(x - boundtext.width() / 2, 30, string) painter.setOpacity(1.0)
def paintEvent(self, e): # call the base implementation to paint normal interface QWidget.paintEvent(self, e); draw = QPainter(); draw.begin(self) h = self.height() - 1 diff = (self._higher - self._lower) * self.scale try: self._step = float(self.width()) / float(diff) except ZeroDivisionError: self._step = 0 x_start = (self._minVal - self._lower) * self._step * self.scale x_end = (self._maxVal - self._lower) * self._step * self.scale draw.setOpacity(1.0) draw.setBrush(QtCore.Qt.NoBrush) draw.setPen(QColor(200, 200, 255)) for i in range( int(self.width()/5), int(self.width()-self.width()/5) + 1, int(self.width()/5) ): draw.drawLine(i, 0, i, h) draw.setBrush(QColor(238, 238, 238)) draw.setPen(QColor(238, 238, 238)) draw.drawRoundedRect(0, 2, self.width(), h - 4, 3, 3) draw.setBrush(QColor(33, 133, 208)) draw.setPen(QColor(33, 133, 208)) draw.drawRoundedRect(int(round(x_start)), 2, int(round(x_end - x_start)), h - 4, 3, 3) # draw.setOpacity(1.0) draw.setFont(QFont('Decorative', 8)) draw.setPen(QColor(80, 80, 80)) str(self._maxVal) if self._use_float else str(int(round(self._maxVal))) boundtext = draw.boundingRect(QtCore.QRectF(), str(self._higher) if self._use_float else str(int(round(self._higher)))) draw.drawText(self.width() - boundtext.width(), 14, str(self._higher) if self._use_float else str(int(round(self._higher)))) draw.drawText(0, 14, str(self._lower) if self._use_float else str(int(round(self._lower)))) draw.setPen(QColor(255, 255, 255)) boundtext = draw.boundingRect(QtCore.QRectF(), str(self._minVal) if self._use_float else str(int(round(self._minVal)))) draw.drawText(x_start + 2, 14, str(self._minVal) if self._use_float else str(int(round(self._minVal)))) boundtext = draw.boundingRect(QtCore.QRectF(), str(self._maxVal) if self._use_float else str(int(round(self._maxVal)))) draw.drawText(x_end - boundtext.width(), 14, str(self._maxVal) if self._use_float else str(int(round(self._maxVal)))) draw.end()
def _get_buffer(size, filename): buffer = QtSvg.QSvgGenerator() buffer.setResolution( int(QApplication.primaryScreen().logicalDotsPerInch())) buffer.setFileName(filename) buffer.setViewBox(QtCore.QRectF(0, 0, size.width(), size.height())) return buffer
def createAttributePixmap(char, background=Qt.black, color=Qt.white): """ Create a QIcon with a given character. The icon is 13 pixels high and wide. :param char: The character that is printed in the icon :type char: str :param background: the background color (default: black) :type background: QColor :param color: the character color (default: white) :type color: QColor :rtype: QIcon """ icon = QtGui.QIcon() for size in (13, 16, 18, 20, 22, 24, 28, 32, 64): pixmap = QtGui.QPixmap(size, size) pixmap.fill(Qt.transparent) painter = QtGui.QPainter() painter.begin(pixmap) painter.setRenderHints(painter.Antialiasing | painter.TextAntialiasing | painter.SmoothPixmapTransform) painter.setPen(background) painter.setBrush(background) margin = 1 + size // 16 text_margin = size // 20 rect = QtCore.QRectF(margin, margin, size - 2 * margin, size - 2 * margin) painter.drawRoundedRect(rect, 30.0, 30.0, Qt.RelativeSize) painter.setPen(color) font = painter.font() # type: QtGui.QFont font.setPixelSize(size - 2 * margin - 2 * text_margin) painter.setFont(font) painter.drawText(rect, Qt.AlignCenter, char) painter.end() icon.addPixmap(pixmap) return icon
def _get_target(scene, painter, buffer, source): try: brush = scene.backgroundBrush() if brush.style() == QtCore.Qt.NoBrush: brush = QtGui.QBrush(scene.palette().color(QtGui.QPalette.Base)) except AttributeError: # not a QGraphicsView/Scene brush = QtGui.QBrush(QtCore.Qt.white) painter.fillRect(buffer.rect(), brush) return QtCore.QRectF(0, 0, source.width(), source.height())
def paintEvent(self, e): """ :param e: :return: """ self._is_painting = True super(EventsWidget, self).paintEvent(e) painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setFont(QFont('Decorative', 8)) slider_pos = self._scroll.sliderPosition() start = slider_pos * self._scale end = start + self.width() * self._scale for i, track in enumerate(self._tracks): if self._break_draw: break track.draw_events(painter, start, end, track_index=i, left_shift=-self._scroll.sliderPosition(), scale=self._scale) # Draw only from pixel start to end painter.setPen(QtCore.Qt.DashLine) painter.setOpacity(0.3) # print('Draw', start, end, self._scale, self._scroll.sliderPosition(), self.width()) # Draw vertical lines for x in range(start - (start % (100 * self._scale)), end, 100 * self._scale): x2draw = (x - slider_pos * self._scale) // self._scale painter.drawLine(x2draw, 20, x2draw, self.height()) string = str(x) boundtext = painter.boundingRect(QtCore.QRectF(), string) painter.drawText(x2draw - boundtext.width() / 2, 15, string) for index, track in enumerate(self._tracks): top = self.which_top(index) # print(top) painter.drawLine(0, top, self.width(), top) painter.drawText(10, top + 15, track.title) painter.setOpacity(1.0) self._pointer.draw(painter, left_shift=-slider_pos, scale=self._scale) # Draw the time pointer painter.end() self._break_draw = False self._is_painting = False
def drawDistBar(painter, rect, distribution, colortable): """ Parameters ---------- painter : QtGui.QPainter rect : QtCore.QRect distribution : numpy.ndarray colortable : List[QtGui.QColor] """ # assert numpy.isclose(numpy.sum(distribution), 1.0) # assert numpy.all(distribution >= 0) painter.save() painter.translate(rect.topLeft()) for dvalue, color in zip(distribution, colortable): if dvalue and numpy.isfinite(dvalue): painter.setBrush(color) width = rect.width() * dvalue painter.drawRoundedRect(QtCore.QRectF(0, 0, width, rect.height()), 1, 2) painter.translate(width, 0.0) painter.restore()
def _get_target(scene, painter, buffer, source): return QtCore.QRectF(0, 0, source.width(), source.height())
def _get_buffer(size, filename): buffer = QtSvg.QSvgGenerator() buffer.setResolution(QApplication.desktop().logicalDpiX()) buffer.setFileName(filename) buffer.setViewBox(QtCore.QRectF(0, 0, size.width(), size.height())) return buffer