参考:https://blog.csdn.net/jia666666/article/category/7916211
可以绘制:Qpainter
1,文本 2,各种图像(直线,点,椭圆,弧,扇形,多边形等) 3,图像
流程:(1)初始化 paniter=QPainter() (2)开始 painter.begin() (3)绘制: painter.drawText(..) (4)绘制结束painter.end()
必须在painterEvent事件方法中绘制各种元素
2,绘制简单的文本
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):#不需要调用,会自动加载paintEvent
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_())
绘制各种图形:
弧,圆形,椭圆,矩形(正方形),多边形,绘制图像
import sys,math
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QVBoxLayout
from PyQt5.QtGui import QPainter,QColor,QFont,QPen,QPolygon,QImage
from PyQt5.QtCore import Qt,QRect,QPoint
class DrawDemo(QMainWindow):
def __init__(self):
super(DrawDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
widget=QWidget()
self.setCentralWidget(widget)
layout=QVBoxLayout()
widget.setLayout(layout)
self.text='helloword'
self.size=self.size()
self.show()
def paintEvent(self,event): #paintEvent 当窗口变化是直接调用,不需要调用函数
painter=QPainter()
painter.begin(self)
#设置画笔和字体
painter.setPen(QColor(2,1,3))
painter.setFont(QFont('SimSun',12))
'''绘制圆弧'''
#(1)确定绘制区域
rect=QRect(0,0,100,100) #前两个值为左上角的坐标,后两个值为宽度和高度
#(2)在区域绘制图形
painter.drawArc(rect,0,50*16) #后面两个参数为为起始的角度,和结束的角度,为什么乘16,因为单位为alen,一度=16alen,也就是50度为50*16
'''绘制圆'''
rect=QRect(100,0,50,50)
painter.setPen(Qt.red)
painter.drawArc(rect,0,360*16)
'''绘制带弦的弧'''
rect = QRect(200, 0, 50, 50)
painter.drawChord(rect,1,90*16)
'''绘制扇形'''
rect = QRect(0,50, 50, 50)
painter.drawPie(rect,12,76*16)
'''绘制椭圆'''
painter.drawEllipse(0,100,60,50) #前两个参数为起始坐标,后两个为宽和高,当后两个参数一样为圆
'''绘制多边形'''
#绘制一个正方形
p1=QPoint(100,100)
p2=QPoint(130,100)
p3=QPoint(130,130)
p4=QPoint(100,130)
polygon=QPolygon([p1,p2,p3,p4])
painter.drawPolygon(polygon)
'''绘制一个图形'''
#(1)读取图像
img=QImage('python.png')
#(2)进行绘制,对图片的大小压说为原来的二分之一
rect=QRect(100,100,img.width()/3,img.height()/3)
painter.drawImage(rect,img)
painter.end()
if __name__=='__main__':
app=QApplication(sys.argv)
demo=DrawDemo()
sys.exit(app.exec_())
Qpen:(钢笔)是一个基本的图形对象,用于绘制直线,曲线或者轮廓画出矩形,椭圆形,多边形个其他形状
#coding:gbk
import sys
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPen,QPainter
from PyQt5.QtCore import Qt,QRect
class BrushDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
self.show()
def paintEvent(self,event):
painter=QPainter()
painter.begin(self)
self.penDraw(painter)
painter.end()
def penDraw(self,painter):
#设置钢笔
pen=QPen(Qt.red,2,Qt.SolidLine)
painter.setPen(pen)
painter.drawLine(10,10,100,100)
pen.setStyle(Qt.CustomDashLine)
pen.setDashPattern([1,4,54])
#当改变钢笔的塑性时要setPen
painter.setPen(pen)
painter.drawLine(30,30,40,30)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=BrushDemo()
sys.exit(app.exec_())
QBrush的使用:画刷是一个基本的图形对象,用于填充矩形,椭圆形,多边形等形状,QBrush有三种类型,预定义,过渡和纹理图案(相当于填充)
参考:https://blog.csdn.net/jia666666/article/details/81567313
QPixmap(像素映射):类用于绘图设备的图像显示,它可以作为一个QpainterDevice对象,也可以加载到一个控件中,通常是标签或按钮,用于在标签或按钮上显示图像
QPixmap可以读取的图像文件类型有BMP,GIF,JPG等