栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【pyqt5学习】——Qpainter控件学习(文本、图像、各种图形)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【pyqt5学习】——Qpainter控件学习(文本、图像、各种图形)

目录

1、作用及应用步骤

2、绘制文本drawText()

3、像素级别绘制点(正弦曲线为例)

4、绘制不同样式的直线 

5、绘制弧形、圆形、扇形、图像等

 6、画刷填充区域QBrush


1、作用及应用步骤

QPainter是一个用于绘制的类,该类可以用于绘制:

文本

各种图形

图像

利用QPainter控件进行绘制得到的内容,在窗口尺寸发生改变的时候,会刷新,重新绘制,但是速度极快,以致于肉眼捕捉不到。

使用步骤一般为:

# 创建类

# 触发类开始

# 设置绘制区域、画笔颜色、笔触大小等参数

# 绘制结束

	# 绘制方法,方法名称是固定的
	def paintEvent(self, event):
		# 在当前窗口创建绘制类
		painter = QPainter(self)
		# 开始绘制
		painter.begin(self)
		# 设置画笔颜色
		painter.setPen(QColor(100,100,100))
		# 设置绘制文本字体
		painter.setFont(QFont("simsun",25))
		# 设置绘制内容、绘制区域、对齐方式
		painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")
		# 结束绘制
		painter.end()

2、绘制文本drawText()

输入的是字符串文本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/5/26 12:16
# @Author  : @linlianqin
# @Site    : 
# @File    : QPainter_learn.py
# @Software: PyCharm
# @description:

from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor
from PyQt5.QtCore import Qt
import sys

# 绘制文本
class drawText(QWidget):
	def __init__(self):
		super(drawText, self).__init__()
		self.setWindowTitle("利用QPainter绘制文本")

	# 绘制方法,方法名称是固定的
	def paintEvent(self, event):
		# 在当前窗口创建绘制类
		painter = QPainter(self)
		# 开始绘制
		painter.begin(self)
		# 设置画笔颜色
		painter.setPen(QColor(100,100,100))
		# 设置绘制文本字体
		painter.setFont(QFont("simsun",25))
		# 设置绘制内容、绘制区域、对齐方式
		painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")
		# 结束绘制
		painter.end()


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

 

 上述可以看到,利用QPainter控件绘制的文件,会自适应窗口,一致保持居中的对齐方式。

3、像素级别绘制点(正弦曲线为例)

输入的是像素点坐标

painter.drawPoint(x,y)
# 绘制sin曲线
class drawSin(QWidget):
	def __init__(self):
		super(drawSin, self).__init__()
		self.setWindowTitle("利用QPainter绘制文本")

	# 绘制方法,方法名称是固定的
	def paintEvent(self, event):
		# 在当前窗口创建绘制类
		painter = QPainter(self)
		# 开始绘制
		painter.begin(self)
		# 设置画笔颜色
		painter.setPen(QColor(0,100,100))
		# 设置绘制内容、绘制区域、对齐方式
		## 窗口大小
		size = self.size()
		## 这里是逐点绘制
		for i in range(1000):
			x = 100*(-1+2*i/1000)+size.width()/2 ##加上窗口宽度的一半是为了将图像移动到屏幕中心
			y = -50*math.sin((x-size.width()/2)*math.pi/50)+size.height()/2.0
			painter.drawPoint(x,y)
		# 结束绘制
		painter.end()


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

 

4、绘制不同样式的直线 

输入的是四个数,分别是直线的起点坐标(x1,y1),直线的终点坐标(x2,y2)

 

	# 绘制方法,方法名称是固定的
	def paintEvent(self, event):
		# 在当前窗口创建绘制类
		painter = QPainter(self)
		# 开始绘制
		painter.begin(self)

		## 实线
		pen = QPen(Qt.red,Qt.SolidLine)
		painter.setPen(pen)
		painter.drawLine(20,20,200,20)

		## 虚线
		pen.setStyle(Qt.DashLine)
		painter.setPen(pen)
		painter.drawLine(20,40,200,40)

		## 点划线
		pen.setStyle(Qt.DashDotLine)
		painter.setPen(pen)
		painter.drawLine(20,60,200,60)

		## 自定义
		pen.setStyle(Qt.CustomDashLine)
		pen.setDashPattern([1,4,5,4]) # 设置一段线的长度和间隔
		painter.setPen(pen)
		painter.drawLine(20, 80, 200, 80)




		# 结束绘制
		painter.end()

5、绘制弧形、圆形、扇形、图像等

输入绘制区域和相关的关键点坐标

 

from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor,QPen,QPolygon,QImage
from PyQt5.QtCore import Qt,QRect,QPoint

		## 绘制弧
		#### 规定绘制区域
		rect = QRect(0,10,100,100) ## 左上角点坐标,长宽值
		#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度
		painter.drawArc(rect,0,45*16)

		## 通过绘制弧来绘制圆
		#### 规定绘制区域
		rect = QRect(120,10,100,100) ## 左上角点坐标,长宽值
		#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度
		painter.setPen(Qt.red)
		painter.drawArc(rect,0,360*16)


		## 绘制带线的弧
		#### 规定绘制区域
		rect = QRect(0,120,100,100) ## 左上角点坐标,长宽值
		#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度
		painter.drawChord(rect,0,45*16)

		## 绘制椭圆
		painter.drawEllipse(120,120,150,100)

		## 绘制扇形
		painter.drawPie(240,10,100,100,12,130*16) ### 绘制区域、扇

		## 绘制多边形
		painter.drawPolygon(QPolygon([QPoint(240,20),QPoint(300,100),QPoint(300,120),QPoint(240,150),QPoint(200,100)]))

		## 绘制图像
		image = QImage("1.jpg")
		painter.drawImage(QRect(10,250,image.width()/3,image.height()/3),image)

 6、画刷填充区域QBrush

 

# 利用画刷填充区域
class QBrushDemo(QWidget):
	def __init__(self):
		super(QBrushDemo, self).__init__()
		self.setWindowTitle("利用画刷填充区域")

	# 绘制方法,方法名称是固定的
	def paintEvent(self, event):
		# 在当前窗口创建绘制类
		painter = QPainter(self)
		# 开始绘制
		painter.begin(self)

		brush = QBrush(Qt.Dense1Pattern)
		painter.setBrush(brush)
		painter.drawRect(10,10,100,100)
		
		brush = QBrush(Qt.Dense2Pattern)
		painter.setBrush(brush)
		painter.drawRect(10,120,100,100)
		
		brush = QBrush(Qt.Dense3Pattern)
		painter.setBrush(brush)
		painter.drawRect(120,10,100,100)
		
		brush = QBrush(Qt.SolidPattern)
		painter.setBrush(brush)
		painter.drawRect(120,120,100,100)

		painter.end()



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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号