Bootstrap

PyQt5教程(九)——绘图

PyQt5的绘图系统可用于渲染矢量图、图像和文本。如果想改变或增强已有的控件,或者想从头创建一个自定义控件时,我们就需要在程序中进行图形的绘制。我们可以使用PyQt5提供的绘图API进行绘图操作。

绘图要在paintEvent()方法中实现。在QPainter对象的begin()与end()方法间编写绘图代码。它会在控件或其他图形设备上进行低级的图形绘制。

ps:我在后期使用pyqt绘图的时候遇到无法实时刷新的问题,已解决,希望能帮助到遇到相同问题的人

self.repaint()

在需要重画的地方调用QWidget的repaint方法即可,update方法有时不好用

绘制文本

我们先以窗体内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 = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
\u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
\u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle("Draw 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_())

示例中我们绘制了一些西里尔字母,文本是垂直且水平对齐的。

def paintEvent(self, event):
...

绘制工作在paintEvent的方法内部完成。

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.AlignCe
;