• PyQt中的图形绘制


    '''
    class Node: 画目标节点
    功能描述:绘制一个圆表示目标节点
    '''

    class Node(QGraphicsItem):

        Rect = QRectF(-10, -10, 20, 20)

        def __init__(self, color, position):
            super(Node, self).__init__()
            self.color = color
            self.setPos(position)
       
        def boundingRect(self):
            return Node.Rect

        def shape(self):
            path = QPainterPath()                               
            path.addEllipse(Node.Rect)                            #向路径中添加一个圆
            return path

     

        def paint(self, painter, option, widget=None):
            global k
            while True:
                x = self.xx
                y = self.yy
                if  (-SCENESIZE )<= x <= SCENESIZE and (-SCENESIZE ) <= y <= SCENESIZE:
                    break
            self.setPos(QPointF(x, y))
            painter.setPen(Qt.NoPen)              #Qt.NoPen表示不进行线条或边框的绘制
            #painter.setBrush(QBrush(self.color))
            painter.setBrush(QBrush(Qt.black,1))
            painter.drawPath(self.shape())                       #绘制路径
            #painter.drawEllipse(Node.Rect)
            QToolTip.setFont(QFont('Courier New', 12))
            strToolTip=QString("x=%d,y=%d" % (x,y))
            self.setToolTip(strToolTip)
            painter.setPen(Qt.yellow)
            textFont = QFont("宋体", 18, QFont.Bold)
            painter.setFont(textFont)
            painter.drawText(Node.Rect, Qt.AlignCenter, "%d" % self.id)
            self.scene().update()
            if k==NodeNumber:
                switchEvent.set()
                k=1
            else:
                k=k+1

     

    1.绘制文字
    painter.drawText(Node.Rect, Qt.AlignCenter, "%d" % self.id)
    第一个参数指定绘制文字所在的矩形;第二个参数指定了文字在矩形中的对齐方式,
    第三个参数就是所要绘制的文字。

    2.绘制路径
    如果要重复绘制一个复杂的图形,可以使用QPainterPath类对象,然后使用QPainter.drawPath()来进行绘制。QPainterPath类为绘制操作提供了一个容器,可以用来创建图形并且进行重复使用。在Node类的shape()函数中,我们向路径中添加一个圆(path.addEllipse(Node.Rect))。当我们要绘制节点时(即在paint()函数中):
    (1)我们只需调用drawPath()来进行绘制即可(粉红色部分);
    (2)当然我们也可以用painter.drawEllipse(Node.Rect)来达到同样的效果。但当我们需要重复绘制复杂的图形时,我们会发现方法(1)明显变得简单许多,因为创建图形时我们只需把要绘制的图形添加进绘制路径,每次需要重绘时只需调用drawPath()对绘制路径的内容进行绘制即可。而方法(2)在每次重绘时都要重新创建图形。

     

  • 相关阅读:
    CTFHUB-技能树-Web-文件上传
    CTFHUB-技能树-Web-XSS-反射型
    一个算法习题
    python2和python3如何共存并都可用
    beacon帧字段结构最全总结(一)——beacon基本结构
    WiFi基础知识整理
    无线 WIFI 的13个信道频率范围
    Wifi模块的工作原理
    WIFI无线协议802.11a/b/g/n/ac的演变以及区别
    HTTP网络通讯协议详解
  • 原文地址:https://www.cnblogs.com/fuxianfeng1988/p/3247461.html
Copyright © 2020-2023  润新知