QPainter类在QWidget上执行绘图操作,它是一个绘图工具,为大部分图形界面提供了高度优化的函数,绘制操作在
QWidget.paintEvent()
中完成。绘制方法必须放在QtGui.QPainter
对象的begin()
和end()
之间。
方法 | 描述 |
---|---|
begin() | 开始在目标设备上绘制 |
drawArc() | 在起始角度和最终角度之间画弧 |
drawEllipse() | 在一个矩形内画一个椭圆 |
drawLine(int x1,int y1,int x2,int y2) | 绘制一条指定了端点坐标的线 |
drawPixmap() | 从图像文件中提取Pixmap并将其显示在指定的位置 |
drawPolygon() | 使用坐标数组绘制多边形 |
drawRect(int x,int y,int w,int h) | 以给定的高度和宽度从左上角坐标(x,y)绘制一个矩形 |
drawText() | 显示给定坐标处的文字 |
fillRect() | 使用QColor参数填充矩形 |
setBrush() | 设置画笔风格 |
setPen() | 设置用于绘制的笔的颜色、大小和样式 |
枚举类型 | 描述 |
---|---|
Qt.NoPen | 没有线 |
Qt.SolidLine | 一条简单的线 |
Qt.DashLine | 由一些像素分隔的短线 |
Qt.DotLine | 由一些像素分隔的点 |
Qt.DashDotLine | 轮流交替的点和短线 |
Qt.DashDotDotLine | 一条短线,两个点 |
Qt.MPenStyle | 画笔风格的掩码 |
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Win(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 400)
self.setWindowTitle('在窗口中绘制文字')
self.text = "Hello Python"
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)
form = Win()
form.show()
sys.exit(app.exec_())
import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Win(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 400)
self.setWindowTitle('在窗口中绘制点')
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
#自定义绘制方法
self.drawPoints(painter)
painter.end()
def drawPoints(self,painter):
painter.setPen(Qt.red)#设置画笔的颜色
size = self.size()
for i in range(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
painter.drawPoint(x,y)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Win()
form.show()
sys.exit(app.exec_())
运行效果如下: