zoukankan      html  css  js  c++  java
  • 绘制图像

    绘制文本

    '''
    
    绘图API:绘制文本
    
    1. 文本
    2. 各种图形(直线,点,椭圆,弧,扇形,多边形等)
    3. 图像
    
    QPainter
    
    painter = QPainter()
    
    painter.begin()
    
    painter.drawText(...)
    
    painter.end()
    
    
    必须在paintEvent事件方法中绘制各种元素
    
    
    '''
    
    import sys
    from PyQt5.QtWidgets import QApplication,QWidget
    from PyQt5.QtGui import QPainter,QColor,QFont
    from PyQt5.QtCore import Qt
    
    class DrawText(QWidget):
        def __init__(self):
            super(DrawText,self).__init__()
            self.setWindowTitle('在窗口上绘制文本')
            self.resize(300,200)
            self.text = "Python从菜鸟到高手"
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.begin(self)
            painter.setPen(QColor(150,43,5))
            painter.setFont(QFont('SimSun',25))
    
            painter.drawText(event.rect(),Qt.AlignCenter,self.text)
            painter.end()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        main = DrawText()
        main.show()
        sys.exit(app.exec_())
    

    image
    绘制像素点

    '''
    
    用像素点绘制正弦曲线
    
    -2PI  2PI
    
    drawPoint(x,y)
    
    '''
    
    import sys,math
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import Qt
    
    class DrawPoints(QWidget):
        def __init__(self):
            super(DrawPoints,self).__init__()
            self.resize(300,300)
            self.setWindowTitle('在窗口上用像素点绘制2个周期的正弦曲线')
    
        def paintEvent(self, event):
            painter = QPainter()
            painter.begin(self)
            painter.setPen(Qt.blue)
            size = self.size()
    
            for i in range(1000):
                x = 100 * (-1 + 2.0 * i/1000) + size.width()/2.0
                y = -50 * math.sin((x - size.width()/2.0) * math.pi/50) + size.height()/2.0
                painter.drawPoint(x,y)
    
            painter.end()
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        main = DrawPoints()
        main.show()
        sys.exit(app.exec_())
    image

    绘制不同类型直线

    '''
    
    绘制不同类型的直线
    
    
    
    '''
    
    import sys,math
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import Qt
    
    class DrawMultiLine(QWidget):
        def __init__(self):
            super(DrawMultiLine,self).__init__()
            self.resize(300,300)
            self.setWindowTitle('设置Pen的样式')
    
        def paintEvent(self, event):
            painter = QPainter()
            painter.begin(self)
    
    
            pen = QPen(Qt.red,3,Qt.SolidLine)
    
            painter.setPen(pen)
            painter.drawLine(20,40,250,40)
    
            pen.setStyle(Qt.DashLine)
            painter.setPen(pen)
            painter.drawLine(20, 80, 250, 80)
    
            pen.setStyle(Qt.DashDotDotLine)
            painter.setPen(pen)
            painter.drawLine(20, 120, 250, 120)
    
            pen.setStyle(Qt.DotLine)
            painter.setPen(pen)
            painter.drawLine(20, 160, 250, 160)
    
            pen.setStyle(Qt.DashDotDotLine)
            painter.setPen(pen)
            painter.drawLine(20, 200, 250, 200)
    
            pen.setStyle(Qt.CustomDashLine)
            pen.setDashPattern([1,10,5,8])
            painter.setPen(pen)
            painter.drawLine(20, 240, 250, 240)
    
    
            size = self.size()
    
    
    
            painter.end()
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        main = DrawMultiLine()
        main.show()
        sys.exit(app.exec_())

    image

    绘制各种图形

    '''
    
    绘制各种图形
    
    弧
    圆形
    椭圆
    矩形(正方形)
    多边形
    绘制图像
    
    '''
    
    import sys,math
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    class DrawAll(QWidget):
        def __init__(self):
            super(DrawAll,self).__init__()
            self.resize(300,600)
            self.setWindowTitle('绘制各种图形')
        def paintEvent(self, event):
            qp = QPainter()
            qp.begin(self)
    
            qp.setPen(Qt.blue)
    
            # 绘制弧
            rect = QRect(0,10,100,100)
            # alen: 1个alen等于1/16度   45 * 16
            qp.drawArc(rect,0, 50 * 16)
            # 通过弧绘制圆
            qp.setPen(Qt.red)
            qp.drawArc(120,10,100,100,0, 360 * 16)
    
            # 绘制带弦的弧
            qp.drawChord(10,120,100,100,12,130*16)
    
            # 绘制扇形
            qp.drawPie(10,240,100,100,12,130*16)
    
            # 椭圆
            qp.drawEllipse(120,120,150,100)
            # 绘制5边形
            point1 = QPoint(140,380)
            point2 = QPoint(270,420)
            point3 = QPoint(290,512)
            point4 = QPoint(290,588)
            point5 = QPoint(200,533)
    
            polygon = QPolygon([point1,point2,point3,point4,point5])
            qp.drawPolygon(polygon)
    
            # 绘制图像
            image = QImage('./images/book1.png')
            rect = QRect(10, 400, image.width()/3, image.height()/3)
            #image.save('./images/book1.png')
            qp.drawImage(rect,image)
    
            qp.end()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        main = DrawAll()
        main.show()
        sys.exit(app.exec_())
    image

    画刷填充图形区域

    '''
    
    用画刷填充图形区域
    
    '''
    
    import sys,math
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    class FillRect(QWidget):
        def __init__(self):
            super(FillRect,self).__init__()
            self.resize(600,600)
            self.setWindowTitle('用画刷填充区域')
    
        def paintEvent(self,e):
            qp = QPainter()
            qp.begin(self)
            brush = QBrush(Qt.SolidPattern)
            qp.setBrush(brush)
            qp.drawRect(10,15,90,60)
    
            brush = QBrush(Qt.Dense1Pattern)
            qp.setBrush(brush)
            qp.drawRect(130,15,90,60)
    
            brush = QBrush(Qt.Dense2Pattern)
            qp.setBrush(brush)
            qp.drawRect(250,15,90,60)
    
            brush = QBrush(Qt.Dense3Pattern)
            qp.setBrush(brush)
            qp.drawRect(10, 105, 90, 60)
    
            brush = QBrush(Qt.HorPattern)
            qp.setBrush(brush)
            qp.drawRect(130, 105, 90, 60)
            qp.end()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        main = FillRect()
        main.show()
        sys.exit(app.exec_())
    image
    天道酬勤 循序渐进 技压群雄
  • 相关阅读:
    [转] zigbee的低功耗
    手机显示电量原理
    TinyOS总结(一)
    KingPaper初探redist 之redis设置分析
    KingPaper初探redis之redis在window xp下的安装
    Web开发必知的八种隔离级别
    目前国内著名的维客(wiki)网站
    SSH Secure Shell Client
    Java线程:volatile关键字
    JDK1.6(JDK6.0) 新特性
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/14822062.html
Copyright © 2011-2022 走看看