VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 35
声望: 1

如下图显示,箭头地方显示的文字是反向的,但其他地方又是正常显示的,请问如何解决?谢谢!
description

代码如下:
class Op1_item(pg.GraphicsObject):
def init(self, handler: SctAnalyse_Handler):
super().init()
self.handler = handler
self.picture = QtGui.QPicture()

def _set_pen(self):
    pen = pg.mkPen(color=(255, 0, 0), width=1, style=QtCore.Qt.DashLine)
    return pen

def paint(self, p, *args):
    p.drawPicture(0, 0, self.picture)

def boundingRect(self):
    return QtCore.QRectF(self.picture.boundingRect())

def update_history(self):
    painter = QtGui.QPainter(self.picture)
    if self.handler.sct_list is not None:
        for sct in self.handler.sct_list:
            painter.setPen(pg.mkPen(color=(0, 191, 255), width=1.5, style=QtCore.Qt.DashDotDotLine))
            start_point = QtCore.QPointF(sct.zs1.start_x_index, sct.zs1.pre_ixs[0].start_price)
            end_point = QtCore.QPointF(sct.b.end_x_index, sct.b.end_price)
            painter.drawLine(start_point, end_point)

            painter.setPen(pg.mkPen(color=(255, 255, 0), width=2))
            painter.setBrush(pg.mkBrush(color=(255, 255, 0, 80)))
            # zs2
            painter.drawRect(QtCore.QRectF(QtCore.QPointF(sct.zs2.start_x_index, sct.zs2.zd),
                                           QtCore.QPointF(sct.zs2.end_x_index, sct.zs2.zg)))
            # zs1
            painter.drawRect(QtCore.QRectF(QtCore.QPointF(sct.zs1.start_x_index, sct.zs1.zd),
                                           QtCore.QPointF(sct.zs1.end_x_index, sct.zs1.zg)))

            text_point = QPoint(int(sct.zs2.start_x_index + (sct.zs2.end_x_index - sct.zs2.start_x_index) / 2),
                                sct.zs2.zg + 10)
            painter.drawText(text_point, 'abc')
        painter.end()
Member
avatar
加入于:
帖子: 716
声望: 62

先打印文字,或者在打印文字之前使用setWindow重制一下位置

Member
avatar
加入于:
帖子: 35
声望: 1

请问“setWindow重制一下位置”,这个具体在代码上怎样实现?谢谢!

Member
avatar
加入于:
帖子: 35
声望: 1

我这样写先打印文字的代码,结果还是反的,不知道错在哪里,望指点

def update_history(self):
    painter = QtGui.QPainter(self.picture)
    all_sct = []
    all_sct.extend(self.handler.finish_sct)
    all_sct.extend(self.handler.active_sct)
    i = 0
    for sct in all_sct:
        if i % 2:
            painter.setPen(pg.mkPen(color=(255, 255, 0), width=2))
            painter.setBrush(pg.mkBrush(color=(255, 255, 0, 80)))
        else:
            painter.setPen(pg.mkPen(color=(0, 191, 255), width=2))
            painter.setBrush(pg.mkBrush(color=(0, 191, 255, 80)))

        painter.setFont(QFont('Arial', 9))
        text_point = QPoint(int(sct.zs2.start_x_index + (sct.zs2.end_x_index - sct.zs2.start_x_index) / 2),
                            sct.zs2.zg + 10)
        painter.drawText(text_point, 'abc')

        # zs1
        painter.drawRect(QtCore.QRectF(QtCore.QPointF(sct.zs1.start_x_index, sct.zs1.zd),
                                       QtCore.QPointF(sct.zs1.end_x_index, sct.zs1.zg)))
        # zs2
        painter.drawRect(QtCore.QRectF(QtCore.QPointF(sct.zs2.start_x_index, sct.zs2.zd),
                                       QtCore.QPointF(sct.zs2.end_x_index, sct.zs2.zg)))

        if i % 2:
            painter.setPen(pg.mkPen(color=(255, 255, 0), width=1.5, style=QtCore.Qt.DashDotDotLine))
        else:
            painter.setPen(pg.mkPen(color=(0, 191, 255), width=1.5, style=QtCore.Qt.DashDotDotLine))

        x1 = (sct.zs1.start_x_index + sct.zs1.end_x_index) / 2
        y1 = (sct.zs1.zg + sct.zs1.zd) / 2
        start_point = QtCore.QPointF(x1, y1)
        x2 = (sct.zs2.start_x_index + sct.zs2.end_x_index) / 2
        y2 = (sct.zs2.zg + sct.zs2.zd) / 2
        end_point = QtCore.QPointF(x2, y2)
        painter.drawLine(start_point, end_point)

        end_point2 = QtCore.QPointF(sct.b.end_x_index, sct.b.end_price)
        painter.drawLine(end_point, end_point2)

        i += 1
    painter.end()
Member
avatar
加入于:
帖子: 716
声望: 62

参考一下https://blog.csdn.net/limelove/article/details/112801151 python里的接口应该差不多

Member
avatar
加入于:
帖子: 35
声望: 1

谢谢!

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】