pyqt5讲解5:窗口绘图类控件QPainter,QPen,QBrush,QPixmap

1、QPainter

常用方法

方法描述
begin()开始在目标设备上绘制
drawArc()在起始角度和最终角度之间画弧
drawEliipse()在一个矩形内画一个椭圆
drawLine(int x1,int y1,int x2,int y2)绘制一条指定了端点坐标的直线,并且指定当前画笔位置为(x2,y2)
drawPixmap()从图像文件中提取 Pixmap 并将其显示在指定位置
drawPolygon()使用坐标数组绘制多边形
drawRect(int x,int y,int w,int h)以给定的宽度和高度从左上角坐标(x,y)开始绘制一个矩形
drawText()显示给定坐标处的文字
fillRext()使用 QColor 参数填充矩形
setBrush()设置画笔风格
setPen()设置用于绘制的笔的颜色、大小和样式

setpen可选参数

参数描述
Qt.NoPen没有线
Qt.SolidLine一条简单的线
Qt.DashLine由一些像素分隔的短线
Qt.DotLine由一些像素分隔得点
Qt.DashDotLine轮流交替的点和短线
Qt.DashDotDotLine一条短线、两个点
Qt.MPenStyle画笔风格的掩码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date  : 2020/8/20

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *


class Drawing(QWidget):
    def __init__(self, parent=None):
        super(Drawing, self).__init__(parent)
        self.setWindowTitle("在窗口中绘制文字")
        self.setWindowIcon(QIcon("head.png"))
        self.resize(300, 200)
        self.text = "你好呀,总裁余"

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        # 自定义绘制方法
        self.draw_text(event, painter)
        painter.end()

    def draw_text(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)
    demo = Drawing()
    demo.show()
    sys.exit(app.exec_())

解释:
首先定义文字
self.text = “你好呀,总裁余”
定义绘制事件
def paintEvent(self, event):
自定义绘制方法
def draw_text(self, event, qp):

绘制点线

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date  : 2020/8/20

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt

class Drawing(QWidget):
    def __init__(self, parent=None):
        super(Drawing, self).__init__(parent)
        self.resize(300, 200)
        self.setWindowTitle("在窗口中画点")
        self.setWindowIcon(QIcon("limi.jpg"))
    def paintEvent(self, event):
        # 初始化绘图工具
        qp = QPainter()
        qp.begin(self)
        # 自定义画点方法
        self.drawPoints(qp)
        qp.end()

    def drawPoints(self, qp):
        qp.setPen(Qt.red)
        size = self.size()#判断当前窗口大小

        for i in range(1000):
            # 绘制正弦图形,周期 [-1000,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
            qp.drawPoint(x, y)


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

2、QPen

QPen(钢笔)是基本图形对象,用于绘制直线、曲线或者给轮廓画出矩形、椭圆形、多边形以及其他形状等

import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 

class Drawing(QWidget):
	def __init__(self):
		super().__init__()
		self.initUI()

	def initUI(self):   
		self.setGeometry(300, 300, 280, 270)
		self.setWindowTitle('钢笔样式例子')        

	def paintEvent(self, e): 
		qp = QPainter()
		qp.begin(self)
		self.drawLines(qp)
		qp.end()

	def drawLines(self, qp):
		pen = QPen(Qt.black, 2, Qt.SolidLine)

		qp.setPen(pen)
		qp.drawLine(20, 40, 250, 40)

		pen.setStyle(Qt.DashLine)
		qp.setPen(pen)
		qp.drawLine(20, 80, 250, 80)

		pen.setStyle(Qt.DashDotLine)
		qp.setPen(pen)
		qp.drawLine(20, 120, 250, 120)

		pen.setStyle(Qt.DotLine)
		qp.setPen(pen)
		qp.drawLine(20, 160, 250, 160)

		pen.setStyle(Qt.DashDotDotLine)
		qp.setPen(pen)
		qp.drawLine(20, 200, 250, 200)

		pen.setStyle(Qt.CustomDashLine)
		pen.setDashPattern([1, 4, 5, 4])
		qp.setPen(pen)
		qp.drawLine(20, 240, 250, 240)

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

3、QBrush

QBrush(画刷),用于填充如矩形、椭圆形或多边形等形状。
QBrush 有三种类型:预定义、过渡和纹理图案。

# -*- coding: utf-8 -*-
 
"""
    【简介】
    绘图中QBrush 的例子 ,绘制九个不同样式的矩形。
     
"""

import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 

class Drawing(QWidget): 
	def __init__(self):
		super().__init__()  
		self.initUI()

	def initUI(self):   
		self.setGeometry(300, 300, 365, 280)
		self.setWindowTitle('画刷例子')        
		self.show()

	def paintEvent(self, e): 
		qp = QPainter()
		qp.begin(self)
		self.drawLines(qp)
		qp.end()

	def drawLines(self, qp): 
		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.DiagCrossPattern)
		qp.setBrush(brush)
		qp.drawRect(10, 105, 90, 60)

		brush = QBrush(Qt.Dense5Pattern)
		qp.setBrush(brush)
		qp.drawRect(130, 105, 90, 60)

		brush = QBrush(Qt.Dense6Pattern)
		qp.setBrush(brush)
		qp.drawRect(250, 105, 90, 60)

		brush = QBrush(Qt.HorPattern)
		qp.setBrush(brush)
		qp.drawRect(10, 195, 90, 60)

		brush = QBrush(Qt.VerPattern)
		qp.setBrush(brush)
		qp.drawRect(130, 195, 90, 60)

		brush = QBrush(Qt.BDiagPattern)
		qp.setBrush(brush)
		qp.drawRect(250, 195, 90, 60)
                         		
if __name__ == '__main__':
	app = QApplication(sys.argv)
	demo = Drawing()
	demo.show()
	sys.exit(app.exec_())

4、QPixmap

QPixmap 类用于绘图设备的图像显示,可作为一个 QPaintDevice 对象,也可以加载到一个控件中。
QPixmap 可以读取的图像文件类型有:BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM 等。
QPixmap 类的常用方法如下:

方法描述
copy()从 QRect 对象复制到 QPixmap 对象
fromIamge()将 QImage 对象转换为 QPixmap 对象
grabWidget()从给定的窗口小控件创建一个像素图
grabWindow()在窗口中创建数据的像素图
load()加载图像文件作为 QPixmap 对象
save()将 QPixmap 对象保存为文件
toImage()将 QPixmap 对象转换为 QImage 对象
# -*- coding: utf-8 -*-

'''
    【简介】
	PyQt5中 QPixmap 例子
   
  
'''

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

if __name__ == '__main__':
	app = QApplication(sys.argv)
	win = QWidget()
	lab1 = QLabel()
	lab1.setPixmap(QPixmap("D:\机器学习\学习草稿\duoren.jpg"))
	vbox=QVBoxLayout()
	vbox.addWidget(lab1)
	win.setLayout(vbox)
	win.setWindowTitle("QPixmap 例子")
	win.show()
	sys.exit(app.exec_())

这篇博文内容来源于书籍《pyqt5快速开发与实战》
我只是记录下有用的信息,方便以后复习查找。
不然学的东西又忘啦。

电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。
在这里插入图片描述

在这里插入图片描述

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

总裁余(余登武)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值