• 窗口绘图类控件-QPainter


    在PyQt5中,一般可以通过QPainter、QPen、QBrush这三个类来实现绘图功能。此外QPixmap的作用是加载并呈现本地图像,而图像的呈现本质上也是通过绘图方式实现的,所以QPixmap也可以被视为绘图的一个类。

    QPainter类在QWidget(控件)上执行绘图操作,它是一个绘制工具,为大部分图形界面提供了高度优化的函数,使QPainter可以绘制从简单的直线到复杂的饼图等。

    绘图操作在QWidget.paintEvent()中完成。绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图形绘制功能,并通过下表所示的方法进行绘制

      begin()    开始在目标设备上绘制

      drawArc()     在起始角度和最终角度之间画弧

      drawEllipse()     在一个矩形内画一个椭圆

      drawLine(int x1,int y1,int x2,int y2)  绘制了一条指定了端点坐标的线。绘制从(x1, y1)到(x2, y2)的直线并且设置画笔位置为(x2, y2)

      drawPixmap()  从图像文件中提取Pixmap并将其显示在指定的位置

      drawPolygon()  使用坐标数组绘制多边形

      drawRect(int x, inty, int w, int h)  以给定的宽度w和高度h从左上角坐标(x, y)绘制一个矩形

      drawText()  显示给定坐标处的文字

      fillRect()      使用QColor参数填充矩形

      setBrush()  设置画笔风格

      setPen()     设置用于绘制的笔的颜色、大小和样式

    还可以设置画笔风格(PenStyle),这是一个枚举类,可以由QPainter类绘制。

    画笔风格如下表所示:

      Qt.NoPen    没有线。比如QPainter.drawRect()填充,但没有绘制任何边界线

      Qt.SolidLine     一条简单的线

      Qt.DashLine    由一些像素分隔的短线

      Qt.DotLine   由一些像素分隔的点

      Qt.DashDotLine  轮流交替的点和短线

      Qt.MPenStyle   画笔风格的掩码

    案例25  绘制文字

    import sys
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QColor, QFont
    from PyQt5.QtCore import Qt
    
    
    class DrawingDemo(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("在窗口中绘制文字")
            self.resize(300, 200)
            self.text = "欢迎学习 PyQt5"
    
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.begin(self)
            self.drawText(event, painter)  # 自定义绘制方法
            painter.end()
    
        def drawText(self, event, qp):
            qp.setPen(QColor(168, 34, 33))  # 设置笔的颜色
            qp.setFont(QFont("SimSun", 20))  # 设置字体
            qp.drawText(event.rect(), Qt.AlignCenter, self.text)  # 绘制文字
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        demo = DrawingDemo()
        demo.show()
        sys.exit(app.exec_())

    案例26  绘制点

    import sys
    import math
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QColor, QFont
    from PyQt5.QtCore import Qt
    
    
    class DrawingDemo(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("在窗口中画点")
            self.resize(300, 200)
    
        def paintEvent(self, event):
            # 初始化绘图工具
            painter = QPainter(self)
            # 开始在窗口中绘制
            painter.begin(self)
            # 自定义画点方法
            self.drawPoints(event, painter)
            # 结束在窗口中绘制
            painter.end()
    
        def drawPoints(self, event, qp):
            qp.setPen(Qt.red)  # 设置笔的颜色
            size = self.size()
    
            for i in range(1000):
                # 绘制正弦函数图形,它的周期是[-100, 100]
                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
                qp.drawPoint(x, y)  # 绘制点
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        demo = DrawingDemo()
        demo.show()
        sys.exit(app.exec_())
  • 相关阅读:
    关于在Websphere下程序找不到jar包内.properties文件的问题
    MysqL的root用户不允许远程连接
    ajax提交表单数据到controller
    js表单验证
    jq删除标签中的元素
    点击超链接触发js事件
    spring的特点
    mysql每个jar包的作用
    抽象工厂举例
    简单的省市联动
  • 原文地址:https://www.cnblogs.com/lynsha/p/13427931.html
Copyright © 2020-2023  润新知