前言:必读
在PyQt5中,一般可以通过Qpainter,QPen,QBrush这三个类来实现绘图功能,此外,QPixmap的作用是加载并呈现本地图像,而图像的本质上也是通过绘图方式实现的,所以QPixmap也可以被视为绘图的一个类
Qpainter类在QWidget(控件)上执性绘图操作,它是一个绘制工具,为大部分图形化界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等
绘制操作在QWidget.paintEvent()中完成,绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图像绘制功能,并通过如表的方法进行绘制
QPainter绘制常用方法
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(300,200)
self.text='欢迎学习 PyQt5'
def paintEvent(self,event):
painter=QPainter()
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)
demo=Drawing()
demo.show()
sys.exit(app.exec_())
效果图如下
self.text='欢迎学习 PyQt5'
def paintEvent(self,event):
painter=QPainter()
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',20))
#绘制文字
qp.drawText(event.rect(),Qt.AlignCenter,self.text)
实例二:绘制点
import sys,math
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Drawing(QWidget):
def __init__(self,parent=None):
super(Drawing,self).__init__(parent)
self.resize(300,200)
self.setWindowTitle('在窗口画点')
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):
#绘制郑玄函数图像,它的周期是【-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=Drawing()
demo.show()
sys.exit(app.exec_())
效果图如下
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)
画笔颜色设置为红色,使用预定义的Qt.red颜色
qp.setPen(Qt.red)
每次调整窗口的大小时,会生成一个绘图事件,使用size()方法得到窗口的当前大小,在新的窗口中随机分布工作区的点
size=self.size()
使用drawPoint()方法绘制一个个点
qp.drawPoint(x,y)
因篇幅问题不能全部显示,请点此查看更多更全内容