PyQt5基本窗口控件(十)窗口绘图类控件

本文介绍了PyQt5中的窗口绘图类控件,包括QPainter用于文字和点的绘制,QPen用于线条样式,QBrush用于形状填充,以及QPixmap用于图像加载和显示。通过多个案例展示了这些类的使用方法和效果。
摘要由CSDN通过智能技术生成

十、窗口绘图类控件

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

1、QPainter

  • QPainter类在 QWidget(控件)上执行绘图操作,它是一个绘制工具,为大部分图形界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等。
  • 绘制操作在 QWidget.paintEvent()中完成。绘制方法必须放在QtGui.QPainter对象的begin()和 end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图形绘制功能。
  • 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,int y,int w,int h) 以给定的宽度w和高度h从左上角坐标(x,y)绘制一个矩形
drawText() 显示给定坐标处的文字
fillRect() 使用QColor参数填充矩形
setBrush() 设置画笔风格
setPen() 设置用于绘制的笔的颜色、大小和样式
  • 画笔风格
枚举类型 描述
Qt.NoPen 没有线。比如 QPainter.drawRect()填充,但没有绘制任何边界线
Qt.SolidLine 一条简单的线
Qt.DashLine 由一些像素分隔的短信
Qt.DotLine 由一些像素分隔的点
Qt.DashDotLine 轮流交替的点和短线
Qt.DashDotDotLine 一条短线、两个点
Qt.MPenStyle 画笔风格的掩码
案例二十五 绘制文字
# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/9 0009 19:55
    # @Author:晚秋拾叶
    # @File:qt04_drawText.py
    # @PyCharm之Python
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt


class Drawing(QWidget):
    def __init__(self, parent=None):
        super(Drawing, self).__init__(parent)
        
        self.setWindowTitle("在窗口中绘制文字")
        self.resize(750, 200)
        self.text = "愚钝半生无羁客,飘零晚秋拾落叶"

    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, 3))
        # 设置字体
        qp.setFont(QFont('SimSun', 20))
        # 绘制文字
        qp.drawText(event.rect(), Qt.AlignCenter, self.text)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Drawing()
    win.show()
    sys.exit(app.exec_())

  • 代码分析
    • 首先定义要绘制的文字(其实是有屏幕上的一个个点point组成的),然后定义绘制事件,所有的绘制操作都发生在此事件内。代码如下
      def paintEvent(self, event):
           painter = QPainter(self)
           painter.begin(self)
           # 调用自定义绘制方法
           self.drawText(event, painter)
           painter.end()
      
    • QtGui.QPainter类负责所有低级别的绘制,所有的绘制方法都要放在begin()和end()之间。
    • 下面是自定义的drawText()方法
      def drawText(self, event, qp):
      	# 设置笔的颜色
      	qp.setPen(QColor(168, 34, 3))
      	# 设置字体
      	qp.setFont(QFont('simSun'
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山哥ol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值