Ejemplo n.º 1
0
    def paintEvent(self, event):
        log_rect = QRectF(self.rect())
        log_rect.setHeight(self.getLogHeight())

        cmd_rect = QRectF(self.rect())
        cmd_rect.setY(self.getLogHeight())
        cmd_rect.setWidth(cmd_rect.width() - self.getButtonWidth())
        cmd_rect.setHeight(self.getCommandHeight())

        btn_rect = QRectF(cmd_rect)
        btn_rect.setX(btn_rect.width())
        btn_rect.setWidth(self.getButtonWidth())

        self.log.setGeometry(*log_rect.getRect())
        self.cmd.setGeometry(*cmd_rect.getRect())
        self.btn.setGeometry(*btn_rect.getRect())
Ejemplo n.º 2
0
 def remember_selected_rect_params(self):
     pos_scene = self.view.mapToScene(self.rubber_band.pos())
     rect_scene = self.view.mapToScene(
         self.rubber_band.rect()).boundingRect()
     downsample = self.slide_helper.get_downsample_for_level(
         self.slide_view_params.level)
     selected_qrectf_0_level = QRectF(pos_scene * downsample,
                                      rect_scene.size() * downsample)
     self.slide_view_params.selected_rect_0_level = selected_qrectf_0_level.getRect(
     )
Ejemplo n.º 3
0
	def scroll_to_index(view_cls, idx, select=True):
		old_value = view_cls.verticalScrollBar().value()
		view_cls.setUpdatesEnabled(False)
		view_cls.verticalScrollBar().setValue(0)
		idx_rect = view_cls.visualRect(idx)
		view_cls.verticalScrollBar().setValue(old_value)
		view_cls.setUpdatesEnabled(True)
		rect = QRectF(idx_rect)
		if app_constants.DEBUG:
			print("Scrolling to index:", rect.getRect())
		view_cls.k_scroller.ensureVisible(rect, 0, 0)
		if select:
			view_cls.setCurrentIndex(idx)
Ejemplo n.º 4
0
class MyGraphicsView(QGraphicsView):
    def __init__(self, central_widget):
        super().__init__(central_widget)
        self.widget = central_widget
        self.start = [0, 0]
        self.end = [0, 0]
        self.my_scene = QGraphicsScene()
        self.rect = QRectF()
        self.old_rect_item = None
        self.old_img_item = None
        self.drawing = False

    def mousePressEvent(self, event):
        self.start = [event.x(), event.y()]
        self.drawing = True

    def mouseMoveEvent(self, event):
        if not self.drawing:
            return
        self.end = [event.x(), event.y()]

        temp_start = [min(self.start[0], self.end[0]), min(self.start[1], self.end[1])]
        temp_end = [max(self.start[0], self.end[0]), max(self.start[1], self.end[1])]

        if self.old_rect_item:
            self.my_scene.removeItem(self.old_rect_item)

        self.rect.setRect(temp_start[0], temp_start[1], temp_end[0] - temp_start[0], temp_end[1] - temp_start[1])
        self.old_rect_item = self.my_scene.addRect(self.rect, QPen(Qt.red, 1, Qt.SolidLine))
        self.setScene(self.my_scene)

    # 释放鼠标
    def mouseReleaseEvent(self, event):
        print('start:[{}, {}]'.format(self.start[0], self.start[1]))
        print('end:[{}, {}]'.format(self.end[0], self.end[1]))
        print(self.rect.getRect())
        
        self.drawing = False
Ejemplo n.º 5
0
class Callout(QGraphicsItem):
    def __init__(self, chart):
        super(Callout, self).__init__(chart)
        self.chart = chart
        self.m_font = QFont()
        self.m_anchor = QPointF()
        self.m_rect = QRectF()
        self.m_textRect = QRectF()
        self.m_text = ""
        self.leftclick = False

    def boundingRect(self):
        anchor = self.mapFromParent(self.chart.mapToPosition(self.m_anchor))
        rect = QRectF()
        rect.setLeft(min(self.m_rect.left(), anchor.x()))
        rect.setRight(max(self.m_rect.right(), anchor.x()))
        rect.setTop(min(self.m_rect.top(), anchor.y()))
        rect.setBottom(max(self.m_rect.bottom(), anchor.y()))
        return rect

    def paint(self, painter, option, widget):
        path = QPainterPath()
        x, y, w, d = self.m_rect.getRect()
        self.m_rect = QRectF(x, y, w, d)
        path.addRoundedRect(self.m_rect, 5, 5)

        anchor = self.mapFromParent(self.chart.mapToPosition(self.m_anchor))
        if not self.m_rect.contains(QPoint(int(anchor.x()), int(anchor.y()))):
            point1 = QPointF()
            point2 = QPointF()
            above = anchor.y() <= self.m_rect.top()
            aboveCenter = anchor.y() > self.m_rect.top() and anchor.y(
            ) <= self.m_rect.center().y()
            belowCenter = anchor.y() > self.m_rect.center().y() and anchor.y(
            ) <= self.m_rect.bottom()
            below = anchor.y() > self.m_rect.bottom()
            onLeft = anchor.x() <= self.m_rect.left()
            leftOfCenter = anchor.x() > self.m_rect.left() and anchor.x(
            ) <= self.m_rect.center().x()
            rightOfCenter = anchor.x() > self.m_rect.center().x() and anchor.x(
            ) <= self.m_rect.right()
            onRight = anchor.x() > self.m_rect.right()
            #get the nearest m_rect corner
            x = (onRight + rightOfCenter) * self.m_rect.width()
            y = (below + belowCenter) * self.m_rect.height()
            cornerCase = (above and onLeft) or (above and onRight) or (
                below and onLeft) or (below and onRight)
            vertical = abs(anchor.x() - x) > abs(anchor.y() - y)
            x1 = x + leftOfCenter * 10 - rightOfCenter * 20 + cornerCase * (
                not vertical) * (onLeft * 10 - onRight * 20)
            y1 = y + aboveCenter * 10 - belowCenter * 20 + cornerCase * vertical * (
                above * 10 - below * 20)
            point1.setX(x1)
            point1.setY(y1)
            x2 = x + leftOfCenter * 20 - rightOfCenter * 10 + cornerCase * (
                not vertical) * (onLeft * 20 - onRight * 10)
            y2 = y + aboveCenter * 20 - belowCenter * 10 + cornerCase * vertical * (
                above * 20 - below * 10)
            point2.setX(x2)
            point2.setY(y2)
            path.moveTo(point1)
            path.lineTo(anchor)
            path.lineTo(point2)
            path = path.simplified()
        painter.setBrush(QColor(255, 255, 255))
        painter.drawPath(path)
        painter.drawText(self.m_textRect, Qt.AlignLeft, self.m_text)

    def mousePressEvent(self, event):
        event.setAccepted(True)

    def mouseMoveEvent(self, event):
        if (event.buttons() == Qt.LeftButton):
            self.setPos(
                self.mapToParent(event.pos() -
                                 event.buttonDownPos(Qt.LeftButton)))
            event.setAccepted(True)
        else:
            event.setAccepted(False)

    def setText(self, text):
        self.m_text = text
        metrics = QFontMetrics(self.m_font)
        self.m_textRect = metrics.boundingRect(QRect(0, 0, 150, 150),
                                               Qt.AlignLeft, self.m_text)
        self.m_textRect.translate(5, 5)
        self.prepareGeometryChange()
        self.m_rect = self.m_textRect.adjusted(-5, -5, 5, 5)

    def setAnchor(self, point):
        self.m_anchor = point

    def updateGeometry(self):
        self.prepareGeometryChange()
        self.setPos(self.chart.mapToPosition(self.m_anchor) + QPoint(10, -50))
Ejemplo n.º 6
0
def qrectf_to_json(val: QRectF):
    return json.dumps(val.getRect())