tags:
categories:
# 绘制图像使用到类QPainter
# 实例化类
painter = QPainter()
# 初始化画板
painter.begin()
# 绘制文本、图形、图像(自己去找方法)
painter.drawText(...)
# 结束绘制
painter.end()
# 必须在paintEvent事件方法中绘制各种元素
# 窗口自动改变时paintEvent事件自动触发
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt
class DrawText(QWidget):
def __init__(self):
super(DrawText, self).__init__()
self.setWindowTitle('在窗口上绘制文本')
self.resize(500, 400)
self.text = "Python从菜鸟到高手"
def paintEvent(self, event):
painter = QPainter(self)
painter.begin(self)
# 设置画笔
print("当窗口尺寸变化时, 自动调用这个方法")
painter.setPen(QColor(150, 43, 5))
# 设置字体
painter.setFont(QFont('SimSun', 25))
painter.drawText(event.rect(), Qt.AlignCenter, self.text)
painter.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DrawText()
main.show()
sys.exit(app.exec_())
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
class DrawPoints(QWidget):
def __init__(self):
super(DrawPoints, self).__init__()
self.resize(300, 300)
self.setWindowTitle('在窗口上用像素点绘制2个周期的正弦曲线')
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
# 设置画笔颜色
painter.setPen(Qt.blue)
size = self.size()
for i in range(1000):
# 横坐标 size.width() / 2.0 显示在屏幕中间
x = 100 * (-1 + 2.0 * i / 1000) + size.width() / 2.0
# 纵坐标 size.height() / 2.0 显示在屏幕中间
y = -50 * math.sin((x - size.width() / 2.0) * math.pi / 50) + size.height() / 2.0
painter.drawPoint(x, y)
painter.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DrawPoints()
main.show()
sys.exit(app.exec_())
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
class DrawMultiLine(QWidget):
def __init__(self):
super(DrawMultiLine, self).__init__()
self.resize(300, 300)
self.setWindowTitle('设置Pen的样式')
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
# 实心线
pen = QPen(Qt.red, 3, Qt.SolidLine)
painter.setPen(pen)
painter.drawLine(20, 40, 250, 40)
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawLine(20, 80, 250, 80)
# 点划线
pen.setStyle(Qt.DashDotDotLine)
painter.setPen(pen)
painter.drawLine(20, 120, 250, 120)
# 点线
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawLine(20, 160, 250, 160)
pen.setStyle(Qt.DashDotDotLine)
painter.setPen(pen)
painter.drawLine(20, 200, 250, 200)
# 自定义的线
pen.setStyle(Qt.CustomDashLine)
pen.setDashPattern([1, 10, 5, 8])
painter.setPen(pen)
painter.drawLine(20, 240, 250, 240)
size = self.size()
painter.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DrawMultiLine()
main.show()
sys.exit(app.exec_())
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class DrawAll(QWidget):
def __init__(self):
super(DrawAll, self).__init__()
self.resize(300, 600)
self.setWindowTitle('绘制各种图形')
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
qp.setPen(Qt.blue)
# 绘制弧 0 10 是左上角坐标 100 100是宽度高度
rect = QRect(0, 10, 100, 100)
# alen: 1个alen等于1/16度 0是起始角度 50 * 16(50度)停止角度
qp.drawArc(rect, 0, 50 * 16)
# 通过弧绘制圆
qp.setPen(Qt.red)
qp.drawArc(120, 10, 100, 100, 0, 360 * 16)
# 绘制带弦的弧
qp.drawChord(10, 120, 100, 100, 12, 130 * 16)
# 绘制扇形
qp.drawPie(10, 240, 100, 100, 12, 130 * 16)
# 椭圆 宽和高不同
qp.drawEllipse(120, 120, 150, 100)
# 绘制5边形
point1 = QPoint(140, 380)
point2 = QPoint(270, 420)
point3 = QPoint(290, 512)
point4 = QPoint(290, 588)
point5 = QPoint(200, 533)
polygon = QPolygon([point1, point2, point3, point4, point5])
qp.drawPolygon(polygon)
# 绘制图像
image = QImage('./images/book1.png')
# 图像缩小到原来的三分之一
rect = QRect(10, 400, image.width() / 3, image.height() / 3)
# image.save('./images/book1.png')
qp.drawImage(rect, image)
qp.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DrawAll()
main.show()
sys.exit(app.exec_())
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class FillRect(QWidget):
def __init__(self):
super(FillRect, self).__init__()
self.resize(600, 600)
self.setWindowTitle('用画刷填充区域')
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
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.HorPattern)
qp.setBrush(brush)
qp.drawRect(130, 105, 90, 60)
qp.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = FillRect()
main.show()
sys.exit(app.exec_())