目次
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)の4つの数値です。
# 绘制方法,方法名称是固定的
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_())