Ejemplo n.º 1
0
 def font(self, prefix, size):
     """Return a QFont corresponding to the given prefix and size."""
     font = QFont(self.fontname[prefix])
     font.setPixelSize(round(size))
     if prefix[-1] == 's':  # solid style
         font.setStyleName('Solid')
     return font
Ejemplo n.º 2
0
def add_reprojections(scene, points, projected, inliers, boards, valid_boards,
                      options):
    marker_font = QFont()
    marker_font.setPixelSize(options.marker_size * 0.75)

    frame_table = points._extend(proj=projected.points, inlier=inliers)

    colors = struct(error_line=(1, 1, 0),
                    outlier=(1, 0, 0),
                    inlier=(0, 1, 0),
                    invalid=(0.5, 0.5, 0))

    pens = colors._map(cosmetic_pen, options.line_width)

    for board, valid_board, board_points in zip(boards, valid_boards,
                                                frame_table._sequence(0)):
        if not valid_board:
            continue

        for point, id in zip(board_points._sequence(), board.ids):

            color_key = 'invalid' if not point.valid else (
                'inlier' if point.inlier else 'outlier')
            add_marker(scene, point.proj, id, options, pens[color_key],
                       colors[color_key], marker_font)

            if point.valid:
                scene.addItem(line(point.proj, point.points, pens.error_line))
Ejemplo n.º 3
0
    def _to_qgraphicstextitem(self):

        t = QGraphicsTextItem()
        t.setDefaultTextColor(QColor(self.color.hexcolor))
        if self.html:
            text = self.text.replace(u'\n', u'<br />')
            t.setHtml(u'<div align="center">%s</div>' %
                      text if self.center else text)
        else:
            t.setPlainText(self.text)
        mw = self.max_width
        if mw is None:
            if self.uniform_coordinates:
                mw = self._canvas.width // 2 - self.x
            else:
                mw = self._canvas.width - self.x
        if self.center:
            mw *= 2
        t.setTextWidth(mw)
        f = QFont(self.font_family,
                  weight=QFont.Bold if self.font_bold else QFont.Normal,
                  italic=self.font_italic)
        for family, substitute in font_substitutions:
            f.insertSubstitution(substitute, family)
        f.setPixelSize(self.font_size)
        t.setFont(f)
        return t
Ejemplo n.º 4
0
def qwtUnscaleFont(painter):
    if painter.font().pixelSize() >= 0:
        return
    dpix, dpiy = get_screen_resolution()
    pd = painter.device()
    if pd.logicalDpiX() != dpix or pd.logicalDpiY() != dpiy:
        pixelFont = QFont(painter.font(), QApplication.desktop())
        pixelFont.setPixelSize(QFontInfo(pixelFont).pixelSize())
        painter.setFont(pixelFont)
Ejemplo n.º 5
0
def add_point_markers(scene, points, board, color, options):
    marker_font = QFont()
    marker_font.setPixelSize(options.marker_size * 0.75)

    pen = cosmetic_pen(color, options.line_width)
    corners = points.points[points.valid]

    for corner, id in zip(corners, board.ids[points.valid]):
        add_marker(scene, corner, id, options, pen, color, marker_font)
Ejemplo n.º 6
0
def qwtUnscaleFont(painter):
    if painter.font().pixelSize() >= 0:
        return
    screenResolution = qwtScreenResolution()
    pd = painter.device()
    if (pd.logicalDpiX() != screenResolution.width()
            or pd.logicalDpiY() != screenResolution.height()):
        pixelFont = QFont(painter.font(), QApplication.desktop())
        pixelFont.setPixelSize(QFontInfo(pixelFont).pixelSize())
        painter.setFont(pixelFont)
Ejemplo n.º 7
0
    def font(self, prefix, size):
        """Returns QFont corresponding to the given prefix and size

        Arguments
        ---------
        prefix: str
            prefix string of the loaded font
        size: int
            size for the font
        """
        font = QFont(self.fontname[prefix])
        font.setPixelSize(size)
        return font
Ejemplo n.º 8
0
    def font(self, prefix, size):
        """Returns QFont corresponding to the given prefix and size

        Arguments
        ---------
        prefix: str
            prefix string of the loaded font
        size: int
            size for the font
        """
        font = QFont(self.fontname[prefix])
        font.setPixelSize(size)
        return font
 def drawText(self, p: QPainter, innerRect: QRectF, innerRadius: float, value: float):
     if not self.m_format:
         return
     f = QFont(self.font())
     f.setPixelSize(10)
     fm = QFontMetricsF(f)
     maxWidth = fm.width(self.valueToText(self.m_max))
     delta = innerRadius / maxWidth
     fontSize = f.pixelSize() * delta * 0.75
     f.setPixelSize(int(fontSize))
     p.setFont(f)
     textRect = QRectF(innerRect)
     p.setPen(self.palette().text().color())
     p.drawText(textRect, Qt.AlignCenter, self.valueToText(value))
Ejemplo n.º 10
0
    def _refresh(self, value: int = None):
        """Refresh the value on all subwidgets."""
        value = value if value else self._value
        self.blockSignals(True)
        self._lineedit.setText(str(value))
        self._slider.setValue(value)
        font = QFont()
        font.setPixelSize(value)
        self._preview.setFont(font)

        font = QFont()
        font.setPixelSize(self.fontMetrics().height() - 4)
        self._preview_label.setFont(font)

        self.blockSignals(False)
Ejemplo n.º 11
0
    def render(self):
        rect = QRect(QPoint(), self.geometry().size())
        self.m_backingStore.resize(rect.size())

        self.m_backingStore.beginPaint(QRegion(rect))

        device = self.m_backingStore.paintDevice()

        p = QPainter(device)
        p.drawImage(0, 0, self.m_image)

        font = QFont()
        font.setPixelSize(32)

        p.setFont(font)
        p.drawText(rect, 0, self.m_text)

        self.m_backingStore.endPaint()
        self.m_backingStore.flush(QRegion(rect))
Ejemplo n.º 12
0
def get_font_array(sz, chars=DEFAULT_CHARS):
    from qtpy.QtGui import QFont, QPainter, QColor

    font = QFont()
    font.setFixedPitch(True)
    font.setPixelSize(int(sz))
    font.setStyleStrategy(QFont.NoAntialias)
    dummy = QImage(10, 10, QImage.Format_ARGB32)
    pnt = QPainter(dummy)
    pnt.setFont(font)
    metric = pnt.fontMetrics()
    rct = metric.boundingRect(chars)
    pnt.end()
    h = rct.height()
    w = rct.width()
    img = QImage(w, h, QImage.Format_ARGB32)
    paint = QPainter()
    paint.begin(img)
    paint.setFont(font)
    paint.setBrush(QColor(255, 255, 255))
    paint.setPen(QColor(255, 255, 255))
    paint.drawRect(0, 0, w + 1, h + 1)
    paint.setPen(QColor(0, 0, 0))
    paint.setBrush(QColor(0, 0, 0))
    paint.drawText(0, paint.fontMetrics().ascent(), chars)
    paint.end()
    try:
        try:
            # PyQt4 (at least until Qt 4.8)
            data = img.bits().asstring(img.numBytes())
        except AttributeError:
            if PYSIDE2:
                # PySide2
                data = bytes(img.bits())
            else:
                # PyQt5
                data = img.bits().asstring(img.byteCount())
    except SystemError:
        # PyQt4 (4.11.3) and PyQt5 (5.3.2) on Python 3
        return
    npy = np.frombuffer(data, np.uint8)
    npy.shape = img.height(), int(img.bytesPerLine() / 4), 4
    return npy[:, :, 0]
Ejemplo n.º 13
0
    def drawContents(self, painter):
        """ @type painter: QPainter """
        w = self.width()
        h = self.height()

        margin = 10

        background = QColor(210, 211, 215)
        text_color = QColor(0, 0, 0)
        foreground = QColor(255, 255, 255)

        painter.setBrush(background)
        painter.fillRect(0, 0, w, h, background)


        pen = QPen()
        pen.setWidth(2)
        pen.setColor(foreground)


        painter.setPen(pen)
        painter.drawRect(0, 0, w - 1, h - 1)

        text_x = 2 * margin
        top_offset = margin
        text_area_width = w - 2 * margin

        painter.setPen(text_color)


        text_size = 150
        font = QFont("Serif")
        font.setStyleHint(QFont.Serif)
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, margin + top_offset, text_area_width, text_size, int(Qt.AlignHCenter | Qt.AlignCenter), self.ert)

        top_offset += text_size + 2 * margin
        text_size = 25
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, top_offset, text_area_width, text_size, int(Qt.AlignHCenter | Qt.AlignCenter), self.ert_title)

        top_offset += text_size + 4 * margin
        text_size = 20
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, top_offset, text_area_width, text_size, int(Qt.AlignHCenter | Qt.AlignCenter), self.version)
Ejemplo n.º 14
0
 def font(self, prefix, size):
     """Return a QFont corresponding to the given prefix and size."""
     font = QFont(self.fontname[prefix])
     font.setPixelSize(size)
     return font
Ejemplo n.º 15
0
 def font(self, size):
     font = QFont(self.font_name)
     font.setPixelSize(size)
     return font
Ejemplo n.º 16
0
 def font(self, size):
     font = QFont(self.font_name)
     font.setPixelSize(size)
     return font
Ejemplo n.º 17
0
    def create_plots(self, theme='dark', **kwargs):
        bold_font = QFont()
        bold_font.setPixelSize(12)
        bold_font.setBold(True)

        self.layout().addStretch()
        self.layout().addWidget(QLabel("Channels: ", font=bold_font))
        self.layout().addSpacing(10)
        # Add check boxes for channels
        self.channels = {}
        for chan_ix in range(len(self.group_info)):
            chan_lbl = self.group_info[chan_ix]['label']
            chk_box = QCheckBox(chan_lbl)
            chk_box.stateChanged.connect(self.check_channel_and_stim)
            self.channels[chan_lbl] = chk_box
            self.layout().addWidget(chk_box)
        self.layout().addSpacing(10)
        bt_clear = QPushButton("Uncheck all")
        bt_clear.clicked.connect(lambda: self.uncheck_all(self.channels))
        self.layout().addWidget(bt_clear)
        self.layout().addSpacing(20)

        # Stimuli types
        self.layout().addWidget(QLabel("Stimuli: ", font=bold_font))
        self.layout().addSpacing(10)
        self.mapping_stimuli = {}

        for stim in MAPPINGSTIMULI:
            self.mapping_stimuli[stim] = QCheckBox(stim)
            self.mapping_stimuli[stim].stateChanged.connect(
                self.check_channel_and_stim)
            self.layout().addWidget(self.mapping_stimuli[stim])
        self.mapping_stimuli['Custom'] = QCheckBox()
        l = QHBoxLayout()
        self.custom_stimulus = QLineEdit("Custom")
        l.addWidget(self.mapping_stimuli['Custom'])
        l.addSpacing(3)
        l.addWidget(self.custom_stimulus)
        self.layout().addLayout(l)
        self.layout().addSpacing(10)
        bt_clear = QPushButton("Uncheck all")
        bt_clear.clicked.connect(
            lambda: self.uncheck_all(self.mapping_stimuli))
        self.layout().addWidget(bt_clear)
        self.layout().addSpacing(20)

        # side
        self.layout().addWidget(QLabel("Body Side: ", font=bold_font))
        self.layout().addSpacing(10)
        self.sides = {'Left': QCheckBox("Left"), 'Right': QCheckBox("Right")}
        l = QHBoxLayout()
        l.addWidget(self.sides['Left'])
        l.addWidget(self.sides['Right'])
        self.layout().addLayout(l)
        self.layout().addSpacing(20)

        # Body part
        self.layout().addWidget(QLabel("Limb: ", font=bold_font))
        body_widget = QWidget(self)
        body_widget.setLayout(QGridLayout())
        body_widget.layout().setContentsMargins(0, 0, 0, 0)
        lbl = QLabel()
        lbl.setPixmap(
            QPixmap(
                os.path.join(os.path.dirname(__file__), 'icons',
                             'HalfBody.png')))
        body_widget.layout().addWidget(lbl, 0, 0, 20, 10)

        self.body_parts = {}
        cb = QCheckBox('')
        self.body_parts['Head'] = cb
        body_widget.layout().addWidget(cb, 1, 0, 1, 1)

        cb = QCheckBox('')
        self.body_parts['Arm'] = cb
        body_widget.layout().addWidget(cb, 8, 4, 1, 1)

        cb = QCheckBox('')
        self.body_parts['Hand'] = cb
        body_widget.layout().addWidget(cb, 10, 5, 1, 1)

        cb = QCheckBox('')
        self.body_parts['Leg'] = cb
        body_widget.layout().addWidget(cb, 14, 1, 1, 1)

        cb = QCheckBox('')
        self.body_parts['Foot'] = cb
        body_widget.layout().addWidget(cb, 18, 1, 1, 1)

        bt_clear = QPushButton("Uncheck all")
        bt_clear.clicked.connect(lambda: self.uncheck_all(self.body_parts))
        body_widget.layout().addWidget(bt_clear, 20, 0, 1, 10)

        self.layout().addWidget(body_widget)
        self.layout().addSpacing(20)

        self.bt_map = QPushButton("Submit Response")
        self.bt_map.setEnabled(False)
        self.bt_map.setMinimumHeight(40)
        self.bt_map.clicked.connect(self.submit_map)
        self.layout().addWidget(self.bt_map)

        self.layout().addSpacing(10)
        bt_clear = QPushButton("Clear Channel")
        bt_clear.setMinimumHeight(20)
        bt_clear.clicked.connect(self.clear_data)
        self.layout().addWidget(bt_clear)
        self.layout().addStretch()

        # manual notes
        self.layout().addWidget(QLabel("Note: ", font=bold_font))
        self.note_field = QTextEdit()
        self.note_field.setMaximumHeight(80)
        self.note_field.textChanged.connect(self.check_note)
        self.layout().addWidget(self.note_field)
        self.layout().addSpacing(10)
        self.bt_note = QPushButton("Submit Note")
        self.bt_note.setEnabled(False)
        self.bt_note.setMinimumHeight(20)
        self.bt_note.clicked.connect(self.submit_note)
        self.layout().addWidget(self.bt_note)
        self.layout().addStretch()
Ejemplo n.º 18
0
 def font(self, prefix, size):
     """Return a QFont corresponding to the given prefix and size."""
     font = QFont(self.fontname[prefix])
     font.setPixelSize(size)
     return font
Ejemplo n.º 19
0
    def configure_plot(self):
        self.plot.setTitle(title=self.plot_config['title'],
                           **{
                               'color': 'w',
                               'size': '16pt'
                           })
        self.plot.hideButtons()

        if self.plot_config['image_plot']:
            self.img = pg.ImageItem()
            self.plot.addItem(self.img)

            pos = np.array(self.plot_config['c_lim'])
            # color = np.array([[0, 0, 0, 255], self.plot_config['pen_color'].getRgb()], dtype=np.ubyte)
            # c_map = pg.ColorMap(pos, color)
            # lut = c_map.getLookupTable(pos[0], pos[1], 1024)

            colormap = cm.get_cmap("inferno")  # cm.get_cmap("CMRmap")
            colormap._init()
            lut = (colormap._lut * 255).view(
                np.ndarray
            )  # Convert matplotlib colormap from 0-1 to 0 -255 for Qt

            self.img.setLookupTable(lut)
            self.img.setLevels(pos)

            self.img.scale(1 / 1000, 1)
            self.img.setPos(DEPTHRANGE[0], 0)

        if self.plot_config['marker_line'] is not None:
            self.plot.addItem(
                pg.InfiniteLine(angle=0 if self.plot_config['swap_xy'] else 90,
                                pos=self.plot_config['marker_line'],
                                movable=False,
                                pen='y'))
        self.plot.setMouseEnabled(x=self.plot_config['mouse_enabled'][0],
                                  y=self.plot_config['mouse_enabled'][1])
        # if mouse is enabled, a right click will bring the plot range to its default values
        self.plot.scene().sigMouseClicked.connect(self.mouse_clicked)
        self.plot.vb.installEventFilter(self)

        if self.plot_config['x_range']:
            self.plot.setXRange(self.plot_config['x_range'][0],
                                self.plot_config['x_range'][1],
                                padding=0)
        if self.plot_config['y_range']:
            self.plot.setYRange(self.plot_config['y_range'][0],
                                self.plot_config['y_range'][1],
                                padding=0)
        self.plot.setLabel('bottom', self.plot_config['x_label'])
        self.plot.setLabel('left', self.plot_config['y_label'])
        if not self.plot_config['x_axis']:
            self.plot.hideAxis('bottom')
        if not self.plot_config['y_axis']:
            self.plot.hideAxis('left')
        font = QFont()
        font.setPixelSize(20)
        font.setBold(True)

        self.plot.getAxis('bottom').setStyle(
            showValues=self.plot_config['x_ticks'],
            tickFont=font,
            tickTextOffset=10)
        self.plot.getAxis('bottom').setTextPen((255, 255, 255, 255))

        self.plot.getAxis('left').setStyle(
            showValues=self.plot_config['y_ticks'], tickFont=font)
        self.plot.getAxis('left').setTextPen((255, 255, 255, 255))
        if self.plot_config['y_tick_labels']:
            self.plot.getAxis('left').setTicks(
                self.plot_config['y_tick_labels'])
        if self.plot_config['interactive']:
            self.plot.scene().sigMouseMoved.connect(self.mouse_moved)
            if self.plot_config['swap_xy']:
                self.line = pg.InfiniteLine(angle=0,
                                            pos=-9999,
                                            movable=False,
                                            pen='w')
            else:
                self.line = pg.InfiniteLine(angle=90,
                                            pos=-9999,
                                            movable=False,
                                            pen='w')
            self.line.setZValue(5)
            self.plot.addItem(self.line)

            self.text = pg.TextItem(text='', color='w', fill=(0, 0, 0, 0))
            self.text.setAnchor(self.plot_config['text_anchor'])
            self.text.setX(0)
            # self.text.setY(0.5)
            self.text.setY(0)
            self.plot.addItem(self.text)
            self.text.setZValue(6)
Ejemplo n.º 20
0
    def drawContents(self, painter):
        """ @type painter: QPainter """
        w = self.width()
        h = self.height()

        margin = 10

        background = QColor(210, 211, 215)
        text_color = QColor(0, 0, 0)
        foreground = QColor(255, 255, 255)

        painter.setBrush(background)
        painter.fillRect(0, 0, w, h, background)


        pen = QPen()
        pen.setWidth(2)
        pen.setColor(foreground)


        painter.setPen(pen)
        painter.drawRect(0, 0, w - 1, h - 1)

        image_width = self.splash_image.width()
        image_height = self.splash_image.height()
        aspect = 1.0
        if image_height:
            aspect = float(image_width) / float(image_height)

        scaled_height = h - 2 * margin
        scaled_width = scaled_height * aspect

        painter.drawRect(margin, margin, scaled_width, scaled_height)
        painter.drawPixmap(margin, margin, scaled_width, scaled_height, self.splash_image)

        text_x = scaled_width + 2 * margin
        top_offset = margin
        text_area_width = w - scaled_width - 2 * margin

        painter.setPen(text_color)


        text_size = 150
        font = QFont("Serif")
        font.setStyleHint(QFont.Serif)
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, margin + top_offset, text_area_width, text_size, Qt.AlignHCenter | Qt.AlignCenter, self.ert)

        top_offset += text_size + 2 * margin
        text_size = 25
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, top_offset, text_area_width, text_size, Qt.AlignHCenter | Qt.AlignCenter, self.ert_title)

        top_offset += text_size + 4 * margin
        text_size = 20
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, top_offset, text_area_width, text_size, Qt.AlignHCenter | Qt.AlignCenter, self.version)

        text_size = 12
        font.setPixelSize(text_size)
        painter.setFont(font)
        painter.drawText(text_x, h - text_size - margin - 5, text_area_width, text_size + 5, Qt.AlignHCenter | Qt.AlignCenter, self.copyright)