PyQt5绘画系统能够渲染矢量图形、图像和轮廓基于字体的文本。
当我们在应用程序中想要改变或是提高现存的部件或者如果我们要创建一个自定义的部件时往往需要用到绘画。为了使用绘画我们可以使用PyQt5提供的绘画API。
QPainter
QPainter对小部件和其他绘图设备执行低级别的绘制,它可以绘制从简单线条到复杂形状的所有内容。
The paintEvent method
通过使用paintEvent()方法进行绘画。绘制代码放在QPainter对象的begin()和end()方法之间,它在小部件和其他绘图设备上执行低级别的绘制。
Drawing text
以下示例中, 我们首先在窗口的客户区域上绘制一些Unicode文本。
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.text = 'Лев Николаевич Толстой\nАнна Каренина'
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('Drawing text')
self.show()
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
self.drawText(event, qp)
qp.end()
def drawText(self, event, qp):
qp.setPen(QColor(168, 34, 3))
qp.setFont(QFont('Decorative', 10))
qp.drawText(event.rect(), Qt.AlignCenter, self.text)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
以上示例中,我们在Cylliric中绘制一些文本,文本垂直和水平对齐。
def paintEvent(self, event): ...
绘图在绘画事件中完成。
qp = QPainter() qp.begin(self) self.drawText(event, qp) qp.end()
QPainter类负责所有低级绘画,所有绘制方法都在begin()和end()之间进行,实际绘画被委托给drawText()方法。
qp.setPen(QColor(168, 34, 3)) qp.setFont(QFont('Decorative', 10))
这里我们定义了用于绘制文本的笔和字体。
qp.drawText(event.rect(), Qt.AlignCenter, self.text)
通过drawText()方法在窗口上绘制文本,paint事件的rect()方法返回需要更新的矩形。使用Qt.AlignCenter在两个维度上进行文本对齐。
Dr